我的要求是编写一个自动捕获相机图片的示例IOS应用程序。使用提供的各种S.O链接,我确实实现了以下代码 -
我的CameraViewController.h类定义如下:
@interface CameraViewController : UIViewController <UIImagePickerControllerDelegate, UINavigationControllerDelegate>
@property (strong, nonatomic) IBOutlet UIImageView *ImageView;
@end
CameraViewController.m具有以下代码:
-(void)viewDidAppear:(BOOL)animated
{
NSLog(@"Setting the background now");
UIImagePickerController *picker = [[UIImagePickerController alloc] init];picker.delegate = self;
picker.allowsEditing = YES;
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
picker.cameraCaptureMode = UIImagePickerControllerCameraCaptureModePhoto;
picker.cameraDevice = UIImagePickerControllerCameraDeviceRear;
picker.showsCameraControls = NO;
picker.navigationBarHidden = NO;
picker.toolbarHidden = NO;
[self presentViewController:picker animated:YES completion:NULL];
NSLog(@"Taking the picture now");
[picker takePicture];
}
-(void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
NSLog(@"Entered the case of finishing pictures");
}
- (void) imagePickerControllerDidCancel: (UIImagePickerController *) picker
{
NSLog(@"Entered the case of cancel");
}
以上代码的作用是成功启动相机应用程序,但我不确定takePicture API是否能够成功点击图片。我在Ipad内的照片应用程序中看不到任何已保存的图片,所以我认为图片没有被点击。 有人可以告诉我,如果上面的代码是正确的,或者我需要做什么来在显示相机控件后自动点击捕获按钮
答案 0 :(得分:2)
[请转到Apple文档中的'使用UIImagePickerController选择图片和拍照',以获取完成所需内容的完整示例应用程序,以及更多内容cameraOverlayView
。 ]
您已将UIImagePickerController
指定为采用CameraViewController
协议,因此您必须实施两条消息:
UIImagePickerControllerDelegate
和
- (void) imagePickerController: (UIImagePickerController *) picker
didFinishPickingMediaWithInfo: (NSDictionary *) info;
正如iOS文档所述,- (void) imagePickerControllerDidCancel: (UIImagePickerController *) picker;
有一个键NSDictionary* info
,它将返回UIImagePickerControllerOriginalImage
。访问它像:
UIImage
由于您的计划是使用UIImage *snapshot = (UIImage *) [info objectForKey: UIImagePickerControllerOriginalImage];
自动拍摄照片(无用户互动),请务必指定
takePicture
答案 1 :(得分:1)
您需要实现UIImagePIckerControllerDelegate的imagePickerController:didFinishPickingMediaWithInfo:方法。
之后,查看mediaInfo字典,里面有一个可以使用的UIImage。
答案 2 :(得分:0)
我知道这是旧的,但使用计时器(参见接受的答案中的注释)的更好的替代方法是实现完成处理程序而不是传入NULL。
[self presentViewController:picker animated:YES completion:^{
NSLog(@"Taking the picture now");
[picker takePicture];
}];
这样,每次拍摄的照片都是一致的,你不会浪费时间增加不必要的延迟。