首页 > 代码库 > phone Extension 用法基础详解

phone Extension 用法基础详解

1 首先我们需要创建一个phone Extension target当然我们也必须知道Extension app必须在一个containg app内 我们从建立一个target开始
选择菜单 file->new->target 




选择photo Editing Extension 点击next  添加名字 完成创建Photo Extension app

2 在我们的app中会有一个独立的photo Extension app 文件




其中PhotoEditingViewController就是我们编辑图片的承载器,我们的图片展示以及代码处理都是在这里面完成,默认的使用sb创建的,而且不能更改,那些不懂sb的需要好好学习了。
info.plist是Extension app的配置文件,我们主要关心的是NSExtension这个数组



NSExtensionAttributes 是Extension app 可以扩展的类型,如PHSupportedMediaTypes可以让我们选择支持的文件类型  如果我们只支持编辑图片,那么只需要添加一个Image的类型
NSExtensionMainStoryboard 是扩展的sb
NSExtensionPointIdentifier 是标示这是一个什么类型的扩展,这个一般在最初创建的时候,已经固定了,基本不用更改。



3 编辑我们的图片扩展app UI


我用的是一个imageView加一个uicollectView实现的选择不同的图片处理方式,显示不同的图片
注意:不要忘记关联sb啊


4 实现PHContentEditingController,这个在创建文件的时候,已经默认添加,主要有以下结果函数

刚进入界面的时候,我们能从这个获取到extnsion的对象和获取到图片对象,把获取的图片展示到背景图片上

- (void)startContentEditingWithInput:(PHContentEditingInput *)contentEditingInput placeholderImage:(UIImage *)placeholderImage {
  self.backGroundImageView.image = placeholderImage;
    CGSize newSize = [self getImageSizeFrame:placeholderImage];
    
    self.backGroundImageView.frame = CGRectMake(0, 0, newSize.width, newSize.height);
}


5 通过coreImage对图片进行编辑

那么如何实现改变图片的image的样式呢,我们通过coreImage的方式


<span style="white-space:pre">	</span>CIFilter * filter = [CIFilter filterWithName:@"CISepiaTone"];
        [filter setValue:originalImage forKey:@"inputImage"];
        [filter setValue:[NSNumber numberWithFloat:5] forKey:@"inputIntensity"];
        
        CIContext *context = [CIContext contextWithOptions:[NSDictionary dictionary]];
        
        CIImage * ciImage = [filter outputImage];
        
        CGImageRef cgimg = [context createCGImage:ciImage fromRect:[ciImage extent]];
        
        UIImage * image = [UIImage imageWithCGImage:cgimg scale:1.0f orientation:UIImageOrientationUp];
        
        CGImageRelease(cgimg);

6 保存编辑的图谱到相册

- (void)finishContentEditingWithCompletionHandler:(void (^)(PHContentEditingOutput *))completionHandler {
  
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
       
        PHContentEditingOutput *output = [[PHContentEditingOutput alloc] initWithContentEditingInput:self.input];
        NSData * archivedData = [NSKeyedArchiver archivedDataWithRootObject:self.selectedFilterName];
        PHAdjustmentData * adjuestmentData = [[PHAdjustmentData alloc] initWithFormatIdentifier:@"com.grandsoft.ReadBook" formatVersion:@"1.0" data:archivedData];
        output.adjustmentData = adjuestmentData;
        switch (self.input.mediaType) {
            case PHAssetMediaTypeImage:
            {
                NSURL * url = self.input.fullSizeImageURL;
                int orie = self.input.fullSizeImageOrientation;
                
                UIImage * image = [UIImage imageWithContentsOfFile:url.path];
                image = [self transformedImage:image withOrientation:orie usingFilter:self.ciFilter];
                NSData * receJPEGData = UIImageJPEGRepresentation(image, 0.9);
                
                NSError * error = nil;
                BOOL success = [receJPEGData writeToURL:output.renderedContentURL options:NSDataWritingAtomic error:&error];
                if(success)
                {
                    completionHandler(output);
                }
                else
                {
                    completionHandler(nil);
                }
                break;
            }
                case PHAssetMediaTypeVideo:
            {
                break;
            }
                
            default:
                break;
        }
        
        
      
        completionHandler(output);
        
        
    });
}

通过简单地以上六步就能完成对photo Extension app。

phone Extension 用法基础详解