【发布时间】:2017-05-25 20:36:18
【问题描述】:
我在为我正在开发的 iOS 应用程序实现相机视图控制器时遇到问题。当按下按钮时,我有一个单例相机对象,用于管理事物的 AVFoundation 端并捕获图像。正如您在下面看到的,一旦从相机捕获UIImage,我就会传递一个使用它的完成块。
下面的第一种方法是按下相机上的捕获按钮时触发的动作。首先,通过禁用预览层上的连接来暂停相机层,然后捕获图像。然后,相机对象捕获UIImage,此时我从视图中删除相机预览层,而是添加一个UIImageView 子视图,其中包含捕获的图像。
接下来,我想将图像添加到我使用 Photos 框架在 Photos 中创建的相册中。我可以毫无问题地创建相册,并且我已经验证了 PHAssetCollection 对象。我在第二种方法中使用的是正确的方法。
但是,由于某种原因,我无法将捕获的UIImage 添加到相册中。我尝试将我项目中的一个随机图像文件添加到相册中,并且操作成功完成。我还通过使用NSLog 语句检查两种方法中的图像描述,验证了正确的图像已成功传递给addPhotoToSavedPhotos 方法。这让我相信图像有问题,但是 imageView 成功显示它,所以我不确定那可能是什么。
如果有人对我可以尝试的解决方案有任何想法,我将不胜感激。第二种方法中NSLog 语句中的error.localizedDescription 也输出"The operation couldn't be completed。 (可可错误-1)。”
- (IBAction)capturePhoto:(id)sender {
[self pauseCameraLayer];
[[eventCamera sharedInstance] captureStillUIImage:^(UIImage *image, NSError *error){
if(error)
{
NSLog(@"error capturing photo");
}
else
{
NSLog(@"%@",image.debugDescription);
}
[_captureButton setHidden:YES];
[_switchCameraButton setHidden:YES];
UIImageView *preview=[[UIImageView alloc] initWithImage:image];
[preview setAutoresizesSubviews:YES];
[preview setContentMode:UIViewContentModeScaleAspectFit];
[preview setTransform:CGAffineTransformMakeRotation(M_PI_2)];
preview.frame=_imageView.bounds;
[_imageView addSubview:preview];
[self addPhotoToSavedPhotos:[image copy]];
NSLog(@"1: %@",image.description);
}];
-(void)addPhotoToSavedPhotos:(UIImage*)photo
{
PHAssetCollection *myCollection=[self getAPPCollection];
[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
//Perform changes to photo library
PHAssetChangeRequest *req=[PHAssetChangeRequest creationRequestForAssetFromImage:photo];
PHAssetCollectionChangeRequest *assetChangeRequest=[PHAssetCollectionChangeRequest changeRequestForAssetCollection:myCollection];
[assetChangeRequest addAssets:[NSArray arrayWithObject:req.placeholderForCreatedAsset]];
//[libReq addAssets:@[assetPlaceHolder]];
}completionHandler:^(BOOL success, NSError *error){
//Perform any necessary actions after adding the photo to the photo
//library
if(!success)
{
NSLog(@"didn't succeed, error: %@",error.localizedDescription);
}
}];
}
【问题讨论】:
-
你解决了吗?
-
您能告诉我们日志中打印的内容吗?
-
这里可能有错误我猜 self addPhotoToSavedPhotos:[image copy]];尝试在 -(void)addPhotoToSavedPhotos:(UIImage*)photo 函数中添加一个断点,并检查是否有照片传入该函数。
标签: ios objective-c uiimage photosframework phphotolibrary