iOS8新特性擴充(Extension)應用之三——照片編輯插件
通過前幾篇部落格的介紹,我們了解到擴充給app提供的更加強大的互動能力,這種強大的互動能力另一方面展現在照片編輯插件的應用。
和通常一樣,我們先建立一個工程,然後建立一個Target,選擇photo editing:
從模闆中,我們可以看到系統為我們建立了一個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;