2015-09-30 27 views
21

我無法找到任何API來捕捉實時照片。我錯過了什麼?在iOS9中捕捉實時照片的API

Apple release DOCs

現場照片

現場照片是iOS版9的一項新功能,允許用戶捕獲和 重溫他們最喜歡的時刻比傳統 照片更豐富的背景。當用戶按下快門按鈕時,相機應用程序 可捕獲更多內容以及常規照片,其中包括 音頻以及照片前後的附加幀。通過這些照片瀏覽 時,用戶可以與他們互動並播放所有拍攝的內容,使照片變得生動。

iOS 9.1引入了API,允許應用程序合併播放 實況照片,並導出數據以供共享。在Photos框架中支持新的 以從 PHImageManager對象獲取PHLivePhoto對象,該對象用於表示 包含實時圖片的所有數據。您可以使用PHLivePhotoView對象(在PhotosUI框架中定義爲 )來顯示實時圖片的內容。 PHLivePhotoView視圖負責顯示圖像,處理 所有用戶交互,並應用視覺處理來播放 的內容。

您也可以使用PHAssetResource訪問用於共享目的的PHLivePhoto對象的數據。您可以使用PHImageManager或 UIImagePickerController爲用戶的照片庫中的 資產請求一個PHLivePhoto對象。如果您有共享擴展名,您還可以通過使用NSItemProvider獲取PHLivePhoto對象 。在共享的接收端 中,可以從發件人最初導出的一組 文件中重新創建PHLivePhoto對象。

在主題演講中,他們提到Facebook將支持Live Photos,所以我會懷疑必須有一種方法來捕捉Live Photos。

回答

7

UIImagePickerController看起來像它將允許捕獲實時照片。

與現場照片

現場照片的工作是支持的設備一個攝像頭應用功能,讓圖片是不只是在某一時刻,但只是之前和之後,包括從瞬間動作和聲音其捕獲。 PHLivePhoto對象代表實時照片,而PHLivePhotoView類則提供系統標準的交互式用戶界面,用於顯示實時照片並播放其內容。 實時照片仍然是照片。 當您使用圖像選擇器控制器捕獲或選擇靜止圖像(通過在mediaTypes數組中僅包含kUTTypeImage類型)時,作爲實時照片捕獲的資產仍會出現在選取器中。但是,當用戶選擇資產時,您的委託對象只接收包含實時圖片的靜止圖像表示的UIImage對象。 要在用戶使用圖像選擇器捕獲或選擇實時圖片時獲取完整的動作和聲音內容,必須在mediaTypes數組中包含kUTTypeImage和kUTTypeLivePhoto類型。有關更多信息,請參閱UIImagePickerControllerDelegate協議參考中的UIImagePickerControllerLivePhoto。

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

+0

可你真的嘗試的UIImagePickerController可以捕捉現場的照片?我不認爲這在文檔中很清楚。我會在星期一在辦公室嘗試......如果你能早點確認,我會將你的答案標記爲正確答案,並給你獎勵。 –

+0

儘管引用了材料,但我看不到任何證據顯示UIImagePickerController實際上允許用戶拍攝現場照片。 – matt

0

作爲每蘋果文檔:

UIImagePickerControllerLivePhoto

所選擇或捕獲的照片的Live照片表示。

實況照片是一張圖片,其中包含拍攝前後 時刻的動態和聲音。在兼容設備上,默認情況下, 相機應用會將所有照片捕獲爲實時照片,但imagePickerController:didFinishPickingImage:editingInfo:方法的 圖像參數僅包含靜止圖像表示。

爲了獲得運動和現場照片顯示 (使用PHLivePhotoView類)的聲音內容,包括kUTTypeImage和 kUTTypeLivePhoto標識符在允許的媒體類型時 構成圖像拾取器控制器。當用戶選擇或 捕獲實況圖片時,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]; 

} 
+1

這段代碼('picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;')用於從照片庫中進行選擇。問題是如何直接從相機捕捉。這似乎是不可能的。 –

-1

沒有爲生活照的人工捕捉沒有API(即沒有類似於AVCapture的API,提供用於捕捉普通的照片或視頻直接控制)。

UIImagePickerController,它通常呈現允許用戶捕捉照片或視頻的用戶界面,也可以在iOS 9.1或更高版本中捕捉實時照片。要允許實時拍攝照片,請將圖像選取器控制器的mediaTypes屬性設置爲包括kUTTypeImagekUTTypeLivePhoto

+0

你可以這麼說,但這樣做實際上並不允許實時拍攝照片。 – matt

相關問題