Ios 在UIView中使用UIImagePickerController
我有一个按钮,当我点击它时,它会显示相机(工作正常) 之后,我可以拍摄图像,等等,但当我点击“使用”时:我的方法是什么也不发生:图像选择器不会关闭它的LELF:应用程序只是什么都不做,我试图拍摄我刚刚拍摄的图像,并将其显示在屏幕上的CGRect中Ios 在UIView中使用UIImagePickerController,ios,ipad,uiview,uiimageview,uiimagepickercontroller,Ios,Ipad,Uiview,Uiimageview,Uiimagepickercontroller,我有一个按钮,当我点击它时,它会显示相机(工作正常) 之后,我可以拍摄图像,等等,但当我点击“使用”时:我的方法是什么也不发生:图像选择器不会关闭它的LELF:应用程序只是什么都不做,我试图拍摄我刚刚拍摄的图像,并将其显示在屏幕上的CGRect中 - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { [pick
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
[picker dismissViewControllerAnimated:YES completion:NULL];
UIImageView *patientImage = [[UIImageView alloc] init];
patientImage.frame = CGRectMake(625, 25, 83, 103);
UIImage *chosenImage = info[UIImagePickerControllerEditedImage];
self.patientImage.image = chosenImage;
}
即使我在没有拍摄图像的情况下按下“取消”按钮,imagePicker(相机界面)也不会自动关闭
任何帮助、建议或指导都将不胜感激。但要:
[self presentViewController:imagePicker animated:YES completion:nil];
删除
[self.addSubView:imagePicker.view]代码>而不是
[自呈现视图控制器:图像选择器动画:是完成:空]代码>
虽然未定义变量picker
,但您正在取消变量picker
。改为:
[自我解除ModalViewController激活:是完成:空]代码>
并确保它位于方法的末尾。是UIView
子类中的getPhoto:
方法吗
如果是这样,那么最好:
将getPhoto:
代码完全移出UIView
子类,并将其放入视图的父视图控制器中
使您的UIButton
成为UIView的属性:@property(非原子,强)UIButton*myButton代码>
在视图控制器中,按如下方式设置按钮的目标和操作:
[myView.myButton addTarget:self action:@selector(getPhoto:) forControlEvents:UIControlEventTouchUpInside];
最后,在getPhoto:
方法中,调用[self-presentViewController:imagePicker-animated:YES-completion:NULL]代码>
您的-(void)imagePickerController:(UIImagePickerController*)选取器未完成使用信息的pickingMediaWithInfo:(NSDictionary*)信息
代码也应进入视图控制器,更改self.patientImage.image=chosenImage代码>至myView.patientImage.image=chosenImage代码>
不知道为什么取消按钮不起作用。
但进行此更改时,它将选择您正在单击的图像
如果需要取消事件,请通过创建自定义UIBarButton
并添加来添加它
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
UIImageView *patientImage = [[UIImageView alloc] init];
patientImage.frame = CGRectMake(625, 25, 83, 103);
UIImage *chosenImage = info[UIImagePickerControllerEditedImage];
self.patientImage.image = chosenImage;
[imagePicker.view removeFromSuperview];
}
尝试:
不应将选择器添加为子视图,而应将选择器添加到UIPopoverController
然后,您可以使用presentPopoverFromRect:inView:permittedRowDirections:animated:
popover方法从UIView
子类中显示它,如下所示:
self.popover = [[UIPopoverController alloc] initWithContentViewController:imagePicker];
[self.popover presentPopoverFromRect:sender.frame inView:self permittedArrowDirections: UIPopoverArrowDirectionAny animated:YES];
然后,您可以使用委托方法通过以下方式解除popover:
[self.popover dismissPopoverAnimatedYES];
以下各项要求:
该表表明,在iPad上,如果指定源类型为UIImagePickerController源类型PhotoLibrary
或
UIImagePickerController源类型SavedPhotosalbum
,必须显示
使用popover控制器的图像选择器,如中所述
UIPopoverController类中的“显示和取消Popover”
参考资料。如果您尝试以模式显示图像选择器
(全屏)用于在保存的图片和电影中进行选择,系统
引发了一个异常
在iPad上,如果指定源类型
UIImagePickerController源类型摄像头
,您可以显示图像
选择器模式(全屏)或使用popover。然而,苹果公司
建议您仅全屏显示摄像头界面
patientImage.frame=CGRectMake(625,25,83,103);这里是x在设备屏幕外:(所以你看不到图像,也看不到[picker DismissViewControllerInitiated:YES completion:NULL];在方法的末尾谢谢你Nitin,但我使用的是ipad,所以它在我的屏幕上,我试着重新定位dismissVieController,但没有成功地将patientImage添加到任何视图中?比如[自我添加子视图:patientImage];问题是presentViewController是UIViewController的一种方法,我需要这个应用程序在UIView中工作,你知道吗?一个视图不应该负责显示另一个控制器。这与iOS的核心MVC背道而驰。你应该让一个视图控制器这样做,正如这个答案中所建议的。当我在ViewController类的viewdidload方法我收到一个错误,说“在myView类型的对象上找不到PicBtn”-但我已将PicBtn声明为UIButton,并将其声明为UIView类“myView”标题中的属性对于那些同样对这个问题感兴趣的人,@vinnyCoyne说什么是正确的做法…但是你必须先创建myView类的实例,然后使用实例变量的名称来调用它,而不是调用myView.myButton
。这解决了我的问题。谢谢
self.popover = [[UIPopoverController alloc] initWithContentViewController:imagePicker];
[self.popover presentPopoverFromRect:sender.frame inView:self permittedArrowDirections: UIPopoverArrowDirectionAny animated:YES];
[self.popover dismissPopoverAnimatedYES];