ちょっとしたハックを思いついたのですが、うまくいきました。まだ少し新しいので、別の方法が見つからなかったので、自由に最適化してください。
基本的な考え方は、[uiimagepickercontroller takePicture] を呼び出すメソッドを実行する、デフォルトのカメラ ボタンの上に非表示のボタンを作成することです。
これが私のサンプルコードです
@implementation myViewController
{
UIImagePickerController *myImagePickerController;
UIButton * fakeCameraButton;
}
- (IBAction)showImagePicker:(id)sender{
// accessible camera validations implied
myImagePickerController = [[UIImagePickerController alloc]init];
myImagePickerController.sourceType=UIImagePickerControllerSourceTypeCamera;
myImagePickerController.showsCameraControls = YES;
myImagePickerController.delegate=self;
myImagePickerController.allowsEditing=YES;
CGFloat myViewHeight = 100; // you play around with the positions to get your desired frame size. This worked for me
UIView * myView = [[UIView alloc] initWithFrame:CGRectMake(0, myImagePickerController.view.frame.size.height - myViewheight, picker.view.frame.size.width, myViewheight)];
fakeCameraButton = [[UIButton alloc] initWithFrame:CGRectMake(myView.frame.size.width / 2 - 30, myView.frame.size.height/2-15, 60, 60)];// position it over the default camera button
[fakeCameraButton addTarget:self action:@selector(cameraButtonPressed) forControlEvents:UIControlEventTouchUpInside];
[fakeCameraButton setTitle:@"" forState:UIControlStateNormal];
[myView addSubview:fakeCameraButton];
myImagePickerController.cameraOverlayView = myView;
[self presentViewController:myImagePickerController animated:YES completion:nil];
}
-(void)cameraButtonPressed{
// Make sure you check if camera is ready before this method.
[myImagePickerController takePicture];
// you are in editing/preview mode here if allowsEditing = YES
// you can remove all your custom overlay views by
myImagePickerController.cameraOverlay = nil
}
前に言ったように、カメラの準備ができているかどうかを確認してください。その方法については、stackoverflow で回答を見つけることができます。
このコードはうまくいかない可能性があるため、編集または代替ソリューションを歓迎します。
iOS dev について詳しく知り、質問するのを手伝ってくれる開発者の仲間が必要です。誰か興味がありますか?