我正在开发一个iOS应用,遇到了实现摄像头视图控制器的问题。当按下按钮时,我有一个单例相机对象来管理
接下来,我想使用Photos框架将图像添加到我创建的相册中。我可以轻松创建相册,而且我已经验证了我在第二个方法中使用的
AVFoundation
方面的事情并捕获图像。如下所示,一旦从相机中捕获UIImage
,我会传递一个使用它的完成块。以下第一个方法是当相机上的拍摄按钮被按下时触发的操作。首先,通过禁用预览层上的连接来暂停相机层,然后捕获图像。然后,相机对象捕获UIImage
,此时我会将相机预览层从视图中删除,并在其位置添加一个带有捕获的图像的UIImageView
子视图。接下来,我想使用Photos框架将图像添加到我创建的相册中。我可以轻松创建相册,而且我已经验证了我在第二个方法中使用的
PHAssetCollection
对象是正确的。然而,由于某种原因,我无法将我捕获的UIImage
添加到相册中。我尝试将我项目中的随机图像文件添加到相册中,操作成功完成。我还通过使用NSLog
语句检查两种方法中的图像描述来验证正确的图像是否成功传递给addPhotoToSavedPhotos
方法。这使我相信图像出了问题,但是imageView成功地显示它,所以我不确定可能是什么问题。如果有人有任何解决方案的想法,我将不胜感激。此外,第二个方法中error.localizedDescription
的NSLog
语句输出"The operation couldn't be completed
. (Cocoa error -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);
}
}];
}