• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

iOS:调用dismissModalViewController后屏幕不再接收触摸

[复制链接]
菜鸟教程小白 发表于 2022-12-12 15:39:03 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我有两种观点。非常简单的设置只是为了玩相机胶卷。

一个 View 将使用以下方法调出相机胶卷:

[self presentViewController:self.imagePicker animated:NO completion:nil];    

UIButton 触发。它打开了摄像头,一切都很好。

拍照后,我正在调用以下命令来关闭 Controller :

[self dismissViewControllerAnimated:NO completion:nil];

再次,一切正常。

但在模态视图关闭后,调出 imagePicker Controller 的 View 不再接收触摸(UIButton 将不再再次调出相机)。

只有当我切换到另一个 View 并返回时,它才会再次开始接收触摸。

我一直在寻找解决此问题的方法,但没有成功找到任何东西。提前致谢。

编辑(添加代码):

在 CameraController.m 中

这是调出相机胶卷的地方

(UIViewController 的子类符合 )

//UIButton that brings up the imagePicker
- (IBAction)useCamera
{
        [self prepareImagePicker];
        [self presentViewController:self.imagePicker animated:NO completion:nil];
}

//Initializing ImagePicker
- (void)prepareImagePicker
{
    if ([UIImagePickerController isSourceTypeAvailable:
         UIImagePickerControllerSourceTypeCamera])
    {
        self.imagePicker = [[UIImagePickerController alloc] init];
        self.imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
        self.imagePicker.mediaTypes = [NSArray arrayWithObjectsNSString *) kUTTypeImage, nil];
        self.imagePicker.delegate = self;

    OverlayCameraView *cameraOverlay = [[OverlayCameraView alloc] initWithFrameCGRect){{0, 0}, 320, 480} andTheCameraController:self];
        self.imagePicker.cameraOverlayView = cameraOverlay;
   }
}

//Delegate Method when a picture is taken
-(void)imagePickerControllerUIImagePickerController *)picker didFinishPickingMediaWithInfoNSDictionary *)info
{
    self.imagePicker.delegate = nil;
    [picker dismissViewControllerAnimated:NO completion:nil];
    self.imagePicker = nil;
    self.imageView.image = [info objectForKey:UIImagePickerControllerOriginalImage];  
}

在 OverlayCameraView.m

//Camera Overlay Class (Subclass of UIView)

- (id)initWithFrameCGRect)frame andTheCameraControllerCameraController*)cameraController
{
    if ((self = [super initWithFrame:frame]))
    {
        self.camera = cameraController;
    //.…2 UIButtons set up

    }
    return self;
}

//Overlay Cancel Button
- (void) cancel
{  
   [self.camera dismissViewControllerAnimated:NO completion:nil];
}

//Overlay Take Picture Button
- (void) takeAPicture
{
    [self.camera.imagePicker takePicture];
}



Best Answer-推荐答案


您应该通过 UIImagePickerControllerDelegate 方法在选择器上调用 dismissViewControllerAnimated 而不是 self

[picker dismissViewControllerAnimated:NO completion:nil];

或者如果您保留对它的引用:

[self.imagePicker dismissViewControllerAnimated:NO completion:nil];

编辑:

根据修改后的代码,我相信

self.imagePicker.cameraOverlayView = cameraOverlay;

应该是:

self.imagePicker.cameraOverlayView = cameraOverlay.view;

如果您不使用 ARC,这也会导致 +2 引用计数并且会泄漏:

self.imagePicker = [[UIImagePickerController alloc] init];

应该是为了正确的引用计数:

UIImagePickerController *picker = [[UIImagePickerController alloc] init];
self.imagePicker = picker;
[picker release];

关于iOS:调用dismissModalViewController后屏幕不再接收触摸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19412878/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap