天天看點

iOS8新特性擴充(Extension)應用之三——照片編輯插件iOS8新特性擴充(Extension)應用之三——照片編輯插件

iOS8新特性擴充(Extension)應用之三——照片編輯插件

       通過前幾篇部落格的介紹,我們了解到擴充給app提供的更加強大的互動能力,這種強大的互動能力另一方面展現在照片編輯插件的應用。

      和通常一樣,我們先建立一個工程,然後建立一個Target,選擇photo editing:

iOS8新特性擴充(Extension)應用之三——照片編輯插件iOS8新特性擴充(Extension)應用之三——照片編輯插件

從模闆中,我們可以看到系統為我們建立了一個controller,這個controller就是用于處理照片的controller,其中方法如下:

- (BOOL)canHandleAdjustmentData:(PHAdjustmentData *)adjustmentData {

   // Inspect the adjustmentData to determine whether your extension can work with past edits.

   // (Typically, you use its formatIdentifier and formatVersion properties to do this.)

   return NO;

}

//這個函數用于從系統相冊擷取到選中的照片,contentEditingInput對象中存有響應的資料類型和image對象

- (void)startContentEditingWithInput:(PHContentEditingInput *)contentEditingInput placeholderImage:(UIImage *)placeholderImage {

  //我們可以在這裡将取到的資料進行展示等等

   self.input = contentEditingInput;

//結束編輯照片時的方法

- (void)finishContentEditingWithCompletionHandler:(void (^)(PHContentEditingOutput *))completionHandler {

   // Update UI to reflect that editing has finished and output is being rendered.

   // Render and provide output on a background queue.

   dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

       // Create editing output from the editing input.

       PHContentEditingOutput *output = [[PHContentEditingOutput alloc] initWithContentEditingInput:self.input];

       //我們可以在這裡将新的圖檔資料寫入到輸出流中

       // output.adjustmentData = <#new adjustment data#>;

       // NSData *renderedJPEGData = <#output JPEG#>;

       // [renderedJPEGData writeToURL:output.renderedContentURL atomically:YES];

       // Call completion handler to commit edit to Photos.

       completionHandler(output);

       // Clean up temporary files, etc.

   });

在目前擴充執行結束編輯之前,我們可以自由渲染我們得到的圖檔,例如添加相框,文字等等,輸出時将渲染後的圖檔進行輸出即可。

這裡還有一個地方需要我們注意,此類擴充有一個功能,如果我們中途退出編輯,系統會為我們儲存我們擴充的處理狀态,為了區分多個類似功能的擴充,在輸出資料的對象中有一個PHAdjustmentData類型的對象,這個對象專門用于負責版本的記錄,這個對象中有如下兩個屬性用于區分版本:

@property (readonly, copy) NSString *formatIdentifier;

@property (readonly, copy) NSString *formatVersion;

繼續閱讀