1

OS 3.1 の UIImagePickerController インターフェイスを cameraOverlayView と takePicture で使用しようとしていますが、これがどのように機能するかを明らかに理解できていないため、必要な動作が得られません。

私がやりたいことは、ユーザーがピッカーを操作したり画像を編集したりすることなく、カメラを開いて自動的に写真を撮ることです。そこで、UIImagePickerController ( http://github.com/pmark/Helpful-iPhone-Utilities/tree/master/BTL%20Utilities/の例と同様) をサブクラス化し、すべてのコントロールをオフにします。

- (void)displayModalWithController:(UIViewController*)controller animated:(BOOL)animated {
self.sourceType = UIImagePickerControllerSourceTypeCamera;
self.showsCameraControls = NO;
self.navigationBarHidden = YES;
self.toolbarHidden = YES;
    // Setting the overlay view up programmatically.
ipView = [[ImagePickerView alloc] init];
self.cameraOverlayView = ipView;
[controller presentModalViewController:self animated:NO];
}

overlayView で、UIImagePickerController の takePicture メソッドを強制的に起動することができました (これは、NSLog で確認でき、カメラが写真を撮っている音が聞こえるためです)。overlayView は問題なく表示されます。ただし、デリゲート メソッド didFinishPickingMediaWithInfo: は呼び出されず、imagePickerControllerDidCancel も呼び出されません。

では、どのようにデリゲート メソッドを呼び出して取得するか、または takePicture メソッドをオーバーライドして画像を保存するにはどうすればよいでしょうか? (ここで画像データをキャプチャする方法がわかりません。Googleは失敗したようです)。UIImagePickerController の根幹がどのように機能するかを理解できていないと感じずにはいられませんが、ドキュメントはあまり役に立ちません。

例えば:

「カスタム オーバーレイ ビューを提供して、カスタムの写真撮影インターフェイスを表示し、コードから写真の撮影を開始できます。カスタム オーバーレイ ビューは、画像によって提供されるデフォルト コントロールに加えて、またはその代わりに表示できます。ピッカー インターフェース。」

または showCameraControls から:

「このプロパティを NO に設定し、独自のカスタム コントロールを提供すると、画像ピッカー インターフェイスを閉じる前に複数の写真を撮ることができます。」- ピッカー インターフェイスを閉じるにはどうすればよいですか?

注: デリゲートは IB で適切に設定されているため、問題はありません。

ご協力いただきありがとうございます。

4

3 に答える 3

2

takePictureを呼び出す前に「十分に」待つ必要があるか、黙って失敗するだけであることがわかりました。常に機能する「十分な長さ」の最小値を決定する方法についての良い答えはありませんが、タイマーを設定して 5 秒または 10 秒待つと、問題ないはずです。デリゲートから直接またはデリゲートを介して、何らかの「まだ写真を撮る準備ができていません。申し訳ありません」というエラーが返されたらいいのですが、takePicture私が知る限り、そうではありません。

于 2009-10-30T07:17:58.450 に答える
0

私自身の質問の更新として:takePictureを使用しようとしていたのが早すぎたことがわかりました。アクションをオーバーレイ上のボタンに移動し、そのボタンからtakePictureを送信すると(ピッカーがモーダルに提示された後)、デリゲートメソッドが正常に起動しました。そのボタンを押さなくても自動的に画像を撮ることができるかどうかはわかりませんが、実現できる場合は、使用しようとした後、いつかtakePictureを送信する必要があります。

于 2009-10-30T06:15:51.190 に答える
0

-(void)imageMethod:(id)sender{ imagePickerController = [[UIImagePickerController alloc]init]; imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

imagePopover=[[UIPopoverController alloc]initWithContentViewController:imagePickerController];
[imagePopover presentPopoverFromRect:importButton.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionLeft animated:YES];
}
于 2016-02-05T08:01:29.273 に答える