でカスタムオーバーレイを使用しようとしていますがUIImagePickerController、結果の画像を移動およびスケーリングすることもできます。問題は、設定showsCameraControls=YESするとオーバーレイが表示されませんが、移動とスケーリングの機能を使用できることです。ただし、showsCameraControls=NOオーバーレイは表示されますが、写真を撮ると、画像をトリミングするオプションすら表示されません。xib からロードされた実際のビューはUIToolbar、2 つのボタンがあり、そのうちの 1 つが写真を撮ります。
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、オーバーレイを設定する作業を実行します。  
- (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];
}