我正在尝试在 上使用自定义叠加层,UIImagePickerController
并且还能够移动和缩放生成的图像。问题是当我设置时showsCameraControls=YES
,覆盖不会显示,但我可以使用移动和缩放功能。但是,当showsCameraControls=NO
出现覆盖时,但是当我拍照时,我什至没有裁剪图像的选项。从 xib 加载的实际视图只是一个UIToolbar
带有两个按钮的,其中一个用于拍照
我有一个控制器(OverlayViewController
),它从 xib 文件加载覆盖,因为它是视图。此控制器也有一个UIImagePickerController
,因此它将 的覆盖设置UIImagePickerController
为 的视图OverlayController
。第一个方法在不同的控制器中调用以设置并显示它。总之,我需要能够看到overlayView
并使用它的按钮来拍照,然后我可以移动和缩放
-(void) openCameraForImage
{
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
{
self.overlayViewController =
[[OverlayViewController alloc] initWithNibName:@"OverlayViewController" bundle:nil];
// as a delegate we will be notified when pictures are taken and when to dismiss the image picker
self.overlayViewController.delegate = self;
[self.overlayViewController setupImagePicker:UIImagePickerControllerSourceTypeCamera];
[self presentModalViewController:self.overlayViewController.imagePickerController animated:YES];
}
else {
[Common ShowAlert:@"Alert" andMessage:@"There is no camera on this device"];
}
}
此方法用于OverlayViewController
设置 Overlay。
- (void)setupImagePicker:(UIImagePickerControllerSourceType)sourceType
{
self.imagePickerController.sourceType = sourceType;
[self.imagePickerController setAllowsEditing:YES];
if (sourceType == UIImagePickerControllerSourceTypeCamera)
{
// user wants to use the camera interface
//
self.imagePickerController.showsCameraControls = NO; //This line allows overlay to show but move and scale doesn't work
self.imagePickerController.allowsEditing = YES;
//[self.view setUserInteractionEnabled:NO];
if ([[self.imagePickerController.cameraOverlayView subviews] count] == 0)
{
// setup our custom overlay view for the camera
//
// ensure that our custom view's frame fits within the parent frame
CGRect overlayViewFrame = self.imagePickerController.cameraOverlayView.frame;
CGRect newFrame = CGRectMake(0.0,
CGRectGetHeight(overlayViewFrame) -
self.view.frame.size.height - 10.0,
CGRectGetWidth(overlayViewFrame),
self.view.frame.size.height + 10.0);
self.view.frame = newFrame;
self.imagePickerController.cameraOverlayView = self.view;
}
}
}
这个方法在OverlayViewConroller
拍照
- (IBAction)takePhoto:(id)sender
{
[self.imagePickerController takePicture];
}