質問

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の内臓がどのように機能するかを理解できなかったと感じずにはいられませんが、ドキュメントはあまり役に立ちません:

e.g。:

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

またはshowCameraControlsから:

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

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

ご協力いただければありがとうございます!

役に立ちましたか?

解決

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

他のヒント

私自身の質問の更新として:takePictureを早めに使用しようとしていたことがわかりました。アクションをオーバーレイ上のボタンに移動し、そのボタンからtakePictureを送信すると(ピッカーがモーダルで表示された後)、デリゲートメソッドが正常に起動しました。私が望んでいたものが達成可能かどうかはわかりません-そのボタンを押すことなく自動的に画像を撮影します-しかし、そうであれば、おそらくそれを使用しようとした後しばらくしてからtakePictureを送信して行わなければなりません。

-(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];
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top