API捕捉iOS9中的实时照片

我无法find任何API来捕捉现场照片。 我错过了什么?

苹果发布DOC

现场照片

实时照片是iOS 9的一项新function,它允许用户使用比传统照片更丰富的环境来捕捉和重温自己喜欢的时刻。 当用户按下快门button时,相机应用程序会捕捉更多的内容以及常规照片,包括照片前后的audio和附加帧。 浏览这些照片时,用户可以与他们互动,并播放所有捕获的内容,使照片成为现实。

iOS 9.1引入了API,允许应用程序合并Live Photos的播放,并导出数据以供共享。 在Photos框架中有新的支持来从PHImageManager对象获取PHLivePhoto对象,PHImageManager对象用于表示包含Live Photo的所有数据。 您可以使用PHLivePhotoView对象(在PhotosUI框架中定义)来显示实况照片的内容。 PHLivePhotoView视图负责显示图像,处理所有用户交互,并应用视觉处理来回放内容。

您也可以使用PHAssetResource访问PHLivePhoto对象的数据以进行共享。 您可以使用PHImageManager或UIImagePickerController为用户照片库中的资产请求一个PHLivePhoto对象。 如果您有共享扩展名,则还可以使用NSItemProvider获取PHLivePhoto对象。 在共享的接收端,您可以从发件人最初导出的一组文件中重新创build一个PHLivePhoto对象。

在主题演讲中,他们提到Facebook将支持Live Photos,所以我怀疑必须有一种方法来捕捉Live Photos。

UIImagePickerController看起来像它将允许捕捉现场照片。

使用实时照片

Live Photos是支持设备上的相机应用程序function,使照片不仅仅是一个时刻,而是包括拍摄前后的动作和声音。 PHLivePhoto对象代表实时照片,而PHLivePhotoView类提供了一个系统标准的交互式用户界面,用于显示实时照片并播放其内容。 实时照片仍然是照片。 当您使用图像选取器控制器来捕获或select静止图像时(通过在mediaTypes数组中仅包含kUTTypeImagetypes),作为实时照片捕获的资产仍会出现在选取器中。 但是,当用户select资产时,委托对象只接收包含“实时图片”的静止图像表示的UIImage对象。 要在用户使用图像select器捕获或select实时图片时获取完整的动作和声音内容,必须在mediaTypes数组中包含kUTTypeImage和kUTTypeLivePhototypes。 有关更多信息,请参阅UIImagePickerControllerDelegate协议参考中的UIImagePickerControllerLivePhoto。

https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UIImagePickerController_Class/index.html#//apple_ref/occ/cl/UIImagePickerController

在iOS 9中没有爱,但是在iOS 10中可以使用用于拍摄和编辑实时照片的API。

这是关于这一切的WWDC的一个演讲。

根据Apple Doc:

UIImagePickerControllerLivePhoto

所选或拍摄的照片的实时照片表示。

现场照片是一张照片,包括拍摄前后的动作和声音。 在兼容的设备上,相机应用默认捕捉所有照片为实时照片,但是imagePickerController:didFinishPickingImage:editingInfo:方法的图像参数仅包含静止图像表示。

要获取要显示的实况照片的运动和声音内容(使用PHLivePhotoView类),请在configuration图像选取器控制器时,在允许的媒体types中包含kUTTypeImage和kUTTypeLivePhoto标识符。 当用户select或捕获实时照片时,editingInfo字典包含UIImagePickerControllerLivePhoto键,并将照片的PHLivePhoto表示作为相应的值。

在iOS 9.1及更高版本中可用。

// create an image picker controller instance UIImagePickerController *picker = [[UIImagePickerController alloc]init]; picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; picker.allowsEditing = NO; picker.delegate = self; // make sure we include Live Photos (otherwise we'll only get UIImages) NSArray *mediaTypes = @[(NSString *)kUTTypeImage, (NSString *)kUTTypeLivePhoto]; picker.mediaTypes = mediaTypes; // bring up the picker [self presentViewController:picker animated:YES completion:nil]; 

接着

 # pragma mark - UIImagePickerController Delegate - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{ // check if this is a Live Image, otherwise present a warning PHLivePhoto *photo = [info objectForKey:UIImagePickerControllerLivePhoto]; if (!photo) { [self notLivePhotoWarning]; return; } // create a Live Photo View PHLivePhotoView *photoView = [[PHLivePhotoView alloc]initWithFrame:rect]; photoView.livePhoto = [info objectForKey:UIImagePickerControllerLivePhoto]; } 

没有用于手动捕获实时照片的API(即,与提供用于捕获常规照片或video的直接控制的AVCapture API无关)。

UIImagePickerController通常提供一个UI,允许用户捕捉照片或video,也可以在iOS 9.1或更高版本中捕捉实时照片。 要允许实时拍摄照片,请将图像选取器控制器的mediaTypes属性设置为同时包含kUTTypeImagekUTTypeLivePhoto