【问题标题】:Image Move & Resize not working when using a custom camera overlay iPhone SDK 3.1+使用自定义相机覆盖 iPhone SDK 3.1+ 时,图像移动和调整大小不起作用
【发布时间】:2010-01-02 04:08:40
【问题描述】:

我曾经使用老式的方法在相机屏幕上添加叠加层,效果很好。然而,自从 3.1 出来后,Apple 坚持让我使用 API 来添加覆盖。我很快让叠加层开始工作,但似乎如果我使用自定义叠加层,那么移动和调整大小屏幕没有响应,我只能使用或重新拍摄,实际上无法调整大小和移动。我正在使用的代码如下。我尝试了几种变体,但真正启用移动和调整大小的唯一方法是删除添加自定义叠加视图的行。

有什么想法吗?

UIImage *image = [UIImage imageNamed:@"camera-template-long.png"];
UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)] ;
imgView.image = image;

UIView *overlayView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
overlayView.opaque = NO;
[overlayView addSubview:imgView];

UIImagePickerController* picker = [[UIImagePickerController alloc] init];
picker.sourceType = UIImagePickerControllerSourceTypeCamera;        
picker.showsCameraControls = YES;
picker.cameraOverlayView = overlayView;
picker.delegate = self;
picker.allowsEditing = YES;

[self presentModalViewController:picker animated:YES];

【问题讨论】:

    标签: iphone iphone-sdk-3.1


    【解决方案1】:

    allowsEditing/showsCameraControls 属性都设置为NO,将原始视图准备为cameraOverlayView,并使用takePicture 方法。

    然后,imagePickerController:didFinishPickingMediaWithInfo:会被直接调用。


    请尝试以下代码:

    - (void)foo {
      UIImagePickerController *controller = [[[UIImagePickerController alloc] init] autorelease]; 
      controller.sourceType = UIImagePickerControllerSourceTypeCamera; 
      controller.cameraOverlayView = self.cameraOverlay; 
      [self performSelector:@selector(moveOverlayViewToSublayer:) withObject:controller afterDelay:0.1f]; 
      controller.delegate = self; 
      [self presentModalViewController:controller animated:YES]; 
    }
    - (void) moveOverlayViewToSublayer:(UIImagePickerController*)controller { 
      CALayer *aLayer = self.cameraOverlay.layer.superlayer; 
      controller.cameraOverlayView = nil; 
      [aLayer addSublayer:self.cameraOverlay.layer]; 
    }
    

    我希望它会运作良好。

    【讨论】:

    • 这仍然允许调整大小和移动?
    • 对不起,我误解了你的问题。您的问题是“添加自定义叠加层时如何激活调整大小和裁剪操作?”,不是吗?我改变了答案。
    • 这行得通,有一个细微的变化,我需要将allowEditing和showsCameraControls都设置为YES。谢谢。现在让我们看看Apple是否会批准它。我收到警告说 CALayer addSublayer 无效。
    • 我会说不。它不适用于所有版本,所选答案实际上满足了我的需要。
    • @Katokichi:如何在移动新帧时获取覆盖帧大小?
    【解决方案2】:

    一旦您使用[overlayView setUserInteractionEnabled:NO]; 阻止覆盖视图处理输入,整个问题就会消失。

    【讨论】:

    • 那为什么需要覆盖?我尝试按照上面的建议进行操作,之后叠加层不会出现。
    • 我只需要叠加层就可以在实时摄像机视图上显示一个框架。我的叠加层不需要任何用户交互。
    【解决方案3】:

    http://www.techques.com/question/1-10178214/cameraOverlayView-prevents-editing-with-allowsEditing

    这对我来说非常有效。我试图禁用 userInteractionEnabled 但没有成功。

    【讨论】:

      猜你喜欢
      • 2011-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-04
      • 2011-07-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多