ios - UIImagePickerController 覆盖按钮未触发

标签 ios iphone uiimagepickercontroller

当用户登陆页面时,我有一个相机类型的 UIImagePickerController。我已在 UIImagePickerController 顶部放置了一个自定义相机覆盖层,但没有触发任何按钮事件。我知道大部分代码都来自 Apple 基本代码,所以我对发生的事情感到困惑。

@interface TakePhotoViewController : UIImagePickerController <UIImagePickerControllerDelegate, UINavigationControllerDelegate>
...

- (void)showImagePickerForSourceType:(UIImagePickerControllerSourceType)sourceType
{
if (self.capturedImages.count > 0)
{
    [self.capturedImages removeAllObjects];
}

self.sourceType = sourceType;
self.delegate = self;

if (sourceType == UIImagePickerControllerSourceTypeCamera)
{
    /*
     The user wants to use the camera interface. Set up our custom overlay view for the camera.
     */
    self.showsCameraControls = NO;

    /*
     Load the overlay view from the OverlayView nib file. Self is the File's Owner for the nib file, so the overlayView outlet is set to the main view in the nib. Pass that view to the image picker controller to use as its overlay view, and set self's reference to the view to nil.
     */
    [[NSBundle mainBundle] loadNibNamed:@"CameraOverlay" owner:self options:nil];
    float scale = [self getScaleForFullScreen];
    self.cameraViewTransform = CGAffineTransformMakeScale(scale, scale);
    self.overlayView.frame = self.cameraOverlayView.frame;
    self.cameraOverlayView = self.overlayView;
    self.overlayView = nil;
}

}

CameraOverlay 的所有者是 TakePhotoViewController。 CameraOverlay 内部的按钮之一将 Touch Up Inside 事件发送到下面列出的 socket 功能。附加到按钮的 TakePhotoViewController 中的代码如下,其中没有日志被触发:

- (IBAction)outlet:(id)sender {
NSLog(@"outlet");
}

最佳答案

问题出在这一行:

self.overlayView.frame = self.cameraOverlayView.frame;

我们的cameraOverlayView为零;它没有框架,因为它还不存在。所以我们给overlayView一个零帧。它是无量纲的。该按钮出现,但它的 super View 大小为零,因此无法点击。

现在,您可能会问,这是为什么?这是因为 iOS 中触摸传递的工作方式。为了可触摸, subview 的父 View 也必须是可触摸的,因为父 View 在 subview 之前进行了触摸测试。但是零尺寸 View 是不可触摸的:您的触摸错过了overlayView,因此它也错过了按钮。

解决方案可能就像为 overlayView 提供一个合理的真实框架一样简单。当您这样做时,可能会出现计时问题(例如,在图像选择器即将出现之前,您可能无法真正设置框架 - viewWillAppear :),但无论如何,这是开始的地方。

关于ios - UIImagePickerController 覆盖按钮未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22162857/

相关文章:

ios - iOS 上从 mov 转换为 mp4 的视频无法在浏览器等上播放

ios - 如何自定义 UITableViewCell 的背景颜色?

ios - ** 由于未捕获的异常 'NSInvalidArgumentException' 而终止应用程序,原因 : 'Application tried to present a nil modal view controller on target

ios - 将相册中的照片添加到应用程序中以在 tableView 中显示 - IOS

ios - AVCaptureVideoPreviewLayer捕获角度缩短了吗?

ios - 如何测试 Facebook 移动应用安装广告 “Last Mobile Install Reported” 字段?

ios - IOS同时播放音视频

iPhone UIPickerview reloadAllComponents 不起作用

iphone - 从应用商店安装时使 iPhone 应用付费版本替换免费版本

iphone - 释放还是自动释放?