我正在开发通用应用,想要打开相机。现在我可以在iphone上用UIimagePickerController打开相机但在iPad上却无法正常工作。我搜索了解决方案并找到了此代码
self.cameraController = [[UIImagePickerController alloc] init];
self.cameraController.sourceType = UIImagePickerControllerSourceTypeCamera;
self.cameraController.modalPresentationStyle = UIModalPresentationCurrentContext;
self.cameraController.showsCameraControls = NO;
self.cameraController.navigationBarHidden = YES;
self.cameraController.wantsFullScreenLayout = NO;
[self.cameraController setCameraOverlayView:ar_overlayView];
[ar_overlayView setFrame:self.cameraController.view.bounds];
UIViewController *vc = [[[[UIApplication sharedApplication] delegate] window] rootViewController];
if([[[UIDevice currentDevice] systemVersion] floatValue]>=8.0 && UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
[self presentViewController:self.cameraController animated:YES completion:nil];
}];
}
else{
[vc presentViewController:self.cameraController animated:YES completion:nil];
}
还遵循了一些教程,如
TechnoTopia Post但是没有找到任何运气。我已经在iphone 5s中进行过测试并且工作正常但是在iPad mini上相机没有显示。任何帮助将不胜感激!
答案 0 :(得分:1)
试试iPad版
-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
if (buttonIndex==0)
{
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
UIImagePickerController* picker=[[UIImagePickerController alloc]init];
picker.delegate=self;
picker.allowsEditing=YES;
picker.sourceType=UIImagePickerControllerSourceTypePhotoLibrary;
[self presentViewController:picker animated:YES completion:nil];
}];
}
else if (buttonIndex==1)
{
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
UIImagePickerController* picker=[[UIImagePickerController alloc]init];
picker.delegate=self;
picker.allowsEditing=YES;
picker.sourceType=UIImagePickerControllerSourceTypeCamera;
[self presentViewController:picker animated:YES completion:nil];}];
}
}
答案 1 :(得分:0)
对于iPad,你应该这样做:
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:picker];
[popover presentPopoverFromRect:self.selectedImageView.bounds inView:self.selectedImageView permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
self.popOver = popover;
}else {
[self presentModalViewController:picker animated:YES];
}
.h文件声明:
@property (nonatomic, strong) UIPopoverController *popOver;
你应该处理popover委托:
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
-(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
Apple文档: apple link
它声明:
“通过调用当前活动视图控制器的presentViewController:animated:completion:方法呈现用户界面,将配置的图像选择器控制器作为新视图控制器传递。在iPad上,使用弹出窗口显示用户界面。仅当图像选择器控制器的sourceType属性设置为UIImagePickerControllerSourceTypeCamera时才有效。“
答案 2 :(得分:0)
- (IBAction)onClickSelectPicture:(id)sender
{
if( [UIImagePickerController isCameraDeviceAvailable: UIImagePickerControllerCameraDeviceFront ])
{
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.allowsEditing = YES;
picker.sourceType=UIImagePickerControllerSourceTypeCamera;
picker.cameraDevice=UIImagePickerControllerCameraDeviceFront;
[self presentViewController:picker animated:YES completion:NULL];
}
else
{
UIAlertView *myAlertView = [[UIAlertView alloc] initWithTitle:@"Error"
message:@"Device has no camera"
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles: nil];
[myAlertView show];
}
}
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
imgProf = info[UIImagePickerControllerEditedImage];
[viewNewPhoto setImage:imgProf];
imgProf = [self imageWithImage:imgProf scaledToSize:CGSizeMake(imgProf.size.width/4, imgProf.size.height/4)];
if (imgProf == nil)
{
imgPhotoString = @"NoPhoto";
}else
{
imgPhotoString = [self getStringFromImage:imgProf];
}
[picker dismissViewControllerAnimated:YES completion:NULL];
}
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
{
[picker dismissViewControllerAnimated:YES completion:NULL];
}
答案 3 :(得分:0)
试试这段代码:
UIImagePickerController *aImgPickerController = [[UIImagePickerController alloc] init];
aImgPickerController.delegate = self;
aImgPickerController.allowsEditing = YES;
aImgPickerController.sourceType = UIImagePickerControllerSourceTypeCamera;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self presentViewController:aImgPickerController animated:NO completion:^{
NSLog(@"success present picker");
}];
});