2

独自のカスタム[写真を撮る]ボタンを作成する際に問題が発生します。基本的に、デフォルトのコントロールを削除すると、カメラはシャッターアニメーションを実行したり、編集プロセスを実行したりせず、デリゲートメソッドに直接移動します。

だから、ここにいくつかのコードがあります。最初は、次のようなデフォルトのレイアウトを使用していました。

(ちなみに、ハードウェアの可用性を判断するためのifステートメントは削除しました。これらは無関係です。)

UIImagePickerController *picker = [[UIImagePickerController alloc] init];

picker.delegate = self;
picker.allowsEditing = YES;


picker.sourceType = UIImagePickerControllerSourceTypeCamera;
picker.showsCameraControls = YES;
picker.cameraCaptureMode = UIImagePickerControllerCameraCaptureModePhoto;     

[self presentModalViewController:picker animated:YES];

このコードでは、デフォルトの「写真を撮る」ボタンを押すと、シャッターアニメーションが起動し、「移動して拡大縮小」ビューが表示されます。「選択」を押すと、デリゲートが呼び出され、を介して編集結果にアクセスできますinfo

これが、カスタムの「写真を撮る」ボタンだけを備えた新しい初期化コードです。ちなみに、ViewControllerのviewDidAppearメソッドでこのUIImagePickerControllerを初期化しています

UIImagePickerController *picker = [[UIImagePickerController alloc] init];

picker.delegate = self;
picker.allowsEditing = YES;

UIButton *shoot = [[UIButton alloc] initWithFrame:CGRectMake(110, 420, 100, 40)];
[shoot setTitle:@"Shoot" forState:UIControlStateNormal];
[shoot.titleLabel setTextColor:[UIColor whiteColor]];
[shoot addTarget:picker action:@selector(takePicture) forControlEvents:UIControlEventTouchUpInside];

picker.sourceType = UIImagePickerControllerSourceTypeCamera;
[picker.cameraOverlayView addSubview:shoot];
picker.showsCameraControls = NO;

picker.cameraCaptureMode = UIImagePickerControllerCameraCaptureModePhoto;

[self presentModalViewController:picker animated:YES];

この例では、カスタムボタンを押すと、アニメーションが起動されず、編集画面が表示されず、デリゲートがすぐに呼び出されます。

面白いことに、上記の例でshowsCameraControlsプロパティをYESに変更した場合、カスタムボタンは、最初の例のデフォルトボタンとまったく同じように動作します。

これにはかなり困惑していますが、画像エディタを呼び出すために何かする必要がありdidFinishPickingMediaWithInfoますか、それとも初期化で何かが足りないだけですか?

Xcode4.3とiOS5.1を使用しています(アプリは5.0を対象としています)

どんな助けでも大歓迎です。乾杯!

4

1 に答える 1

2

したがって、「移動と切り抜き」機能はデフォルトのカメラコントロールの一部であるようです

ソースとしてフォトライブラリを使用する場合、唯一のオプションはデフォルトであるため、常に機能します。

最後に、単純なスクロールビューといくつかのオーバーレイビューを使用してクロップボックスを表す独自の「移動とクロップ」ビューを作成しました。

それほど難しくはありませんが、UIScrollViewのズーム率とcontentoffsetに基づいて計算を行う必要があります。

于 2012-08-12T21:24:45.230 に答える