【问题标题】:iOS 7 UIImagePickerController with Overlay - retake and use photo not usableiOS 7 UIImagePickerController with Overlay - 重拍和使用照片不可用
【发布时间】:2013-12-11 12:54:49
【问题描述】:

即使我将 userInteractionsEnabled 设置为 NO 并且我的覆盖框显然没有与按钮重叠,我也无法单击它们。

代码:

    // Init Picker
    UIImagePickerController* picker = [[UIImagePickerController alloc] init];

    //Create camera overlay for square pictures
    CGFloat navigationBarHeight = picker.navigationBar.bounds.size.height + 25;
    CGFloat height = picker.view.bounds.size.height - 2 * navigationBarHeight;
    CGFloat width = picker.view.bounds.size.width;
    CGRect f = CGRectMake(0, navigationBarHeight, width, height);
    CGFloat barHeight = (f.size.height - f.size.width) / 2;
    UIGraphicsBeginImageContext(f.size);
    [[UIColor colorWithRed:0 green:0 blue:0 alpha:0.7] set];
    UIRectFillUsingBlendMode(CGRectMake(0, 0, f.size.width, barHeight), kCGBlendModeNormal);
    UIRectFillUsingBlendMode(CGRectMake(0, f.size.height - barHeight, f.size.width, barHeight - 4), kCGBlendModeNormal);
    UIImage *overlayImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    UIImageView *overlayIV = [[UIImageView alloc] initWithFrame:f];

    // Disable all user interaction on overlay
    [overlayIV setUserInteractionEnabled:NO];
    [overlayIV setExclusiveTouch:NO];
    [overlayIV setMultipleTouchEnabled:NO];

    // Map generated image to overlay
    overlayIV.image = overlayImage;

    // Present Picker
    picker.modalPresentationStyle = UIModalPresentationCurrentContext;
    picker.delegate = self;
    picker.sourceType = UIImagePickerControllerSourceTypeCamera;
    if([UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceFront]) {
        picker.cameraDevice = UIImagePickerControllerCameraDeviceFront;
    }
    [picker.cameraOverlayView addSubview:overlayIV];

    [self presentViewController:picker animated:YES completion:nil];

有什么想法吗?

【问题讨论】:

  • 您将按钮的 userInteractionsEnabled 设置为 NO?那是错误的。另一个想法是你的按钮框架太小了。这将绘制按钮,但它们将不可触摸。
  • 您在哪里设置了按钮或整个视图中的 userInteractionEnabled。在这两种情况下,它都不起作用。首先,您可能有想法,其次,如果视图不可访问,那么如何访问视图的子视图
  • 我添加了上面的代码。如您所见,我只将 setUserInteractionEnabled 设置为覆盖。这些按钮来自 iOS 提供的库存 UIImagePickerController。如果我不使用叠加层,它们就可以工作。
  • 解决了!我不得不将:[picker.cameraOverlayView addSubview:overlayIV]; 更改为:picker.cameraOverlayView = overlayIV; 感谢各位的帮助!

标签: ios iphone ios7 uiimagepickercontroller


【解决方案1】:

改变这个:[picker.cameraOverlayView addSubview:overlayIV];

收件人:[picker setCameraOverlayView:overlayIV];

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,但我的解决方案略有不同。我正在使用 xib 文件,并且适当的视图和按钮确实在正确的层次结构中。

    但我必须在加载主父视图 (viewDidLoad) 后动态创建一个临时视图,并将此临时视图添加为相机叠加层。然后我将按钮作为子视图添加到这个临时视图中。

     - (void)viewDidLoad
     {
       ImgPicker = [[UIImagePickerController alloc] init]; 
    
       if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
    
        // note: need to set a manually created view (vOverlay) as the image picker overlay,
        //  and then add the button controls (vControls) to this manually created vOverlay.
        //  Otherwise, the buttons in vControls are not clickable
         UIView *tempView = [[UIView alloc] initWithFrame:ImgPicker.view.frame];
         [tempView addSubview:self.vButtons];
    
         ImgPicker.cameraOverlayView = tempView;
        }
     }
    

    【讨论】:

      猜你喜欢
      • 2017-10-31
      • 1970-01-01
      • 1970-01-01
      • 2011-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多