2017-02-17 2 views
0

私のアプリでは、私はUIActionSheetとUIImagePickerControllerを使います。アクションシートはオプションを開き(写真を選択し、ビデオを選択する)、イメージピッカーコントローラがライブラリを開きます。このシステムはiPhoneデバイスのテストには適していますが、iPadの場合、ピッカーコントローラは動作しませんが、アクションシートはうまく動作します。iOS - ピッカーコントローラが写真ライブラリを開けない

カメラと写真ライブラリのiOS10に必要な権限を設定しました。これは問題にはなりません。写真を選択するための

私のコードは:

- (void)selectPhoto { 

    self.imagePickerController.delegate = self; 
    self.imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 
    self.imagePickerController.mediaTypes = [NSArray arrayWithObjects:(NSString *)kUTTypeImage, nil]; 
    [self presentViewController:self.imagePickerController animated:YES completion:nil]; 
} 

必須のデリゲートメソッドは、いずれか書かれていました。私が言及したように、あらゆることがiPhoneの場合と同じように機能します。

私は最初の写真のライブラリを開こうとすると、私はこの警告メッセージが出ます:

[警告] < _UIPopoverBackgroundVisualEffectView 0x147c5ad0>は は、その不透明度をアニメーション化するように要求されています。これは何も壊れていない1

を返し、アプリはまだ(冷凍ではない)が実行されている効果は が不透明になるまで壊れて表示される場合があります。しかし、私は写真のライブラリを開こうとするならば、私が手にこの時間:

警告: 上に存在しようと、すでに次に

を(null)を提示している、問題はポップオーバーの問題かもしれませんが、私答えを見つけることができませんでした。 ありがとうございました!

編集:私のアクションシートデリゲートメソッド:

-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex { 

    [actionSheet dismissWithClickedButtonIndex:buttonIndex animated:YES]; 
    switch (buttonIndex) { 
     case 0: 
      [self selectPhoto]; 
      break; 
     case 1: 
      [self selectVideo]; 
      break; 
     default: 
      break; 
    } 
} 

編集2:私はthatが見つかりました:

iPadでは、あなたはで説明 ようポップオーバーを使用してブラウザインタフェースを提示する必要がありますinitWithContentViewController:とPresentingと UIPopoverControllerクラスリファレンスでのPopoverの終了。 iPadで、ブラウザインターフェイスをモーダル (フルスクリーン)で表示しようとすると、システムで例外が発生します。

UIPopoverControllerは廃止されました。したがって、私は別の方法を使うべきです。誰かがこれについて私を助けることができれば、私は幸せになるだろう。

https://developer.apple.com/library/mac/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html

iOS版はすでにマイク、カメラ、およびそれ以前のメディアライブラリにアクセスするためのアクセス許可が必要(iOS6、iOS7:あなたのInfo.plistファイルで指定することができ、すべてのCocoaのキーのリストがあり

+0

を開くために、コードを使用するには、あなたが '' UIImagePickerController'を提示する前に、あなたの 'UIActionSheetController'をdismiss'がありますか? –

+0

私は今はしませんでした。まだ同じ。 – anyName

+0

アラートを終了するための追加コードを示してください。完了時にイメージピッカーを提示する必要があります。それ以外の場合は動作しません。 – Fogmeister

答えて

0

)、なぜあなたが許可を求めているのか説明をしなければ、アプリケーションはクラッシュするでしょう。

0

iPadでは、すでに画面上のUIActionSheetポップオーバーにUIImagePickerControllerのポップオーバーを表示することはできません。

- (void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex; 

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex 

を交換し、それが働かなければなりません。

ボタンをクリックするとすぐに[actionSheet dismissWithClickedButtonIndex:buttonIndex animated:YES];を削除すると、UIActionSheetは自動的に解除されます。

0

iPhoneとiPadの両方で画像を表示するには、ポップオーバーとして表示する必要があります。

は、だからあなたのピッカーを表示する実装では、ピッカーを提示する前に、あなたのアクションシートが却下されていることを確認してください

self.imagePickerController.delegate = self; 
self.imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 
self.imagePickerController.mediaTypes = [NSArray arrayWithObjects:(NSString *)kUTTypeImage, nil]; 
self.imagePickerController.modalPresentationStyle = UIModalPresentationPopover; //This is needed 
self.imagePickerController.sourceView = self.view; //This is needed 
[self presentViewController:self.imagePickerController animated:YES completion:nil]; 

に変更します。 iPadのために

1

UIImagePicker

[[NSOperationQueue mainQueue] addOperationWithBlock:^{ 

       [self presentViewController:picker animated:NO completion:nil]; 
      }]; 
関連する問題