2012-09-01 34 views
2

我正在寫一個iPad亭型應用程序,它允許訪問者使用前置攝像頭錄製視頻,並查看攝像機卷中以外部監視器爲目標的現有視頻。我只是學習XCode,並且在針對iOS 5的Xcode 4.4.1中工作。最近似乎有很多變化,這使得學習變得更加困難,所以我試圖讓事情儘可能簡單,這就是爲什麼我使用UIImagePicker。UIImagePickerController和外部顯示器

一切工作正常,只有一個例外 - 我無法在外部顯示器和iPad之間切換。當用戶錄製視頻時,它在iPad上全屏顯示。這很好,但是在他們停止錄製後,視頻立即被髮送到外部顯示器進行批准,並且佔位符圖像留在UIPopover中。我更願意看到/做的是將視頻預覽全屏保存在iPad上,或將視頻定位到UIPopover。

原因是外部顯示屏不容易從用戶訪問iPad的位置查看。因此,他們被要求批准(點擊使用)他們不能真正看到的東西。將它保存在iPad上會好得多。下面的代碼是我用來允許錄製的。

其他一切都很好,我希望用戶從庫中選擇視頻並顯示在外部監視器上,因爲這是默認行爲,所以它工作正常。

最接近的答案我能找到到目前爲止是這樣的:UIImagePickerController in an existing UIPopoverController

有沒有一種簡單的方法來禁用外接顯示器或保持被髮送的視頻預覽?

- (IBAction)useCameraRoll:(id)sender 
{ 
    if([self.popoverController isPopoverVisible]) { 
     [self.popoverController dismissPopoverAnimated:YES]; 
    } else { 
     if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeSavedPhotosAlbum]) 
     { 

      UIImagePickerController *imagePicker = 
      [[UIImagePickerController alloc] init]; 
      imagePicker.delegate = self; 
      imagePicker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; 
      imagePicker.mediaTypes = [NSArray arrayWithObjects:(NSString *) kUTTypeMovie, nil]; 

      imagePicker.allowsEditing = NO; 

      self.popoverController = [[UIPopoverController alloc] initWithContentViewController:imagePicker]; 
      //self.popoverController = [[UIPopoverController alloc] setContentViewController:animated]; 

      self.popoverController.delegate = self; 

      [self.popoverController 
      presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES]; 

      newMedia = NO; 


     } 
    } 
} 
+0

你有沒有找到解決這個問題的方法?我想下面的答案只是詳細說明如何設置外部設備。我也有一個繪製到外部顯示器的應用程序,但是當用戶使用UIImagePickerController時,它會直接在外部設備應該繪製的任何位置繪製預覽。 –

回答

0

巧合的是,我一直在研究一個與iPad類似的自助服務終端應用程序。在我的情況下,它利用一些增強現實在外部顯示器上顯示相關內容。我使用iPad屏幕作爲增強現實體驗的配置面板。

我發現,最好的方法是使用單獨的窗口和兩個UIScreen用於每個顯示器。這使您能夠正確制定體驗。我不知道你是否已經使用這種方法,但如果你不是,那麼這是一條路。

要開始您可以閱讀ExternalDisplay代碼示例。從摘錄:

從iOS開發者庫的ExternalDisplay示例代碼:

要顯示外部顯示器上的內容,請執行以下操作:

  1. 使用的屏幕類的方法UIScreen類來確定外部顯示是否可用。

  2. 如果外部屏幕可用,請獲取屏幕對象並查看其availableModes屬性中的值。此屬性包含屏幕所支持的配置 。

  3. 選擇對應於所需分辨率的UIScreenMode對象,並將其分配給屏幕 對象的currentMode屬性。

  4. 創建一個新的窗口對象(UIWindow)來顯示您的內容。

  5. 將屏幕對象分配到新窗口的屏幕屬性。

  6. 配置窗口(通過添加視圖或設置OpenGL ES渲染上下文)。

  7. 顯示窗口。

此外,UIScreen文檔quitehelpful。