gpt4 book ai didi

iOS:屏幕在调用 dismissModalViewController 后不再接收 Touches

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:39:37 25 4
gpt4 key购买 nike

我有两种看法。设置非常简单,只是为了玩转相机胶卷。

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

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

UIButton 触发.它会调出相机,一切正常。

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

[self dismissViewControllerAnimated:NO completion:nil];

同样,一切正常。

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

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

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

编辑(添加代码):

在CameraController.m中

这是调出相册的地方

(UIViewController 的子类,符合 <UIImagePickerControllerDelegate, UINavigationControllerDelegate> )

//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 arrayWithObjects:(NSString *) kUTTypeImage, nil];
self.imagePicker.delegate = self;

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

//Delegate Method when a picture is taken
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)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)initWithFrame:(CGRect)frame andTheCameraController:(CameraController*)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];
}

最佳答案

您应该通过 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 后不再接收 Touches,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19412878/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com