3

我曾经使用老式的方法在相机屏幕上添加叠加层,效果很好。然而,自从 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];
4

3 回答 3

3

将两个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]; 
}

我希望它会运作良好。

于 2010-01-06T16:52:27.360 回答
3

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

于 2010-10-11T16:37:02.533 回答
0

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

这对我来说非常有效。我试图禁用 userInteractionEnabled 但徒劳无功。

于 2014-02-05T02:54:48.843 回答