2013-05-10 105 views
0

我用默认的showsCameraControls = YES在我的应用程序内部实现了相机,并且我遇到的问题是当用户确认图像是守护者时,它会用[self.delegate didFinishWithCamera]取消相机。我想留在相机视图中,直到用户完成拍照。如果没有[self.delegate didFinishWithCamera],则应用程序在用户确认要保留照片并且永不返回实时摄像头供稿之后挂起。我该如何留在相机视图中?感谢您的帮助!iPhone相机应用程序 - 如何留在相机视图?

@implementation PHFPhotoOverlayVC 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     self.imagePickerController = [[UIImagePickerController alloc] init]; 
     self.imagePickerController.delegate = self; 
    } 
    return self; 
} 

- (void)setupImagePicker:(UIImagePickerControllerSourceType)sourceType 
{ 
    self.imagePickerController.sourceType = sourceType; 

    if (sourceType == UIImagePickerControllerSourceTypeCamera) 
    { 
     self.imagePickerController.mediaTypes = 
      [NSArray arrayWithObjects:(NSString *) kUTTypeImage, nil]; 
     self.imagePickerController.showsCameraControls = YES; 

#if false 
     if ([[self.imagePickerController.cameraOverlayView subviews] count] == 0) 
     { 
      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 addSubview:self.view]; 
     } 
#endif 
    } 
} 


#pragma mark - 
#pragma mark UIImagePickerControllerDelegate 

- (void) imagePickerController:(UIImagePickerController *)picker 
    didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 
    self.imagePickerController.mediaTypes = 
     [NSArray arrayWithObjects:(NSString *) kUTTypeImage, nil]; 
    self.imagePickerController.showsCameraControls = YES; 


    UIImage *image = [info valueForKey:UIImagePickerControllerOriginalImage]; 
    if (self.delegate) 
     [self.delegate didTakePicture:image]; 

    [self.delegate didFinishWithCamera]; 
} 

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker 
{ 
    [self.delegate didFinishWithCamera]; 
} 

@end 

回答

0

为了实现这一点,你必须实现自己的方法拍摄照片,因为这个默认按钮导致解雇自己的看法。

显然,您可以通过设置showsCameraControls = NO来完成此操作,但是您必须重新创建您仍然需要的所有其他功能。

我从来没有这样做过,但应该可以离开showsCameraControls = YES,并使用cameraOverlayView将相同的“拍照”按钮叠加到现有的按钮上。如果你这样做,你只需要让该按钮调用UIImagePickerViewController实例的方法-takePicture。

希望这就够了,随时发表评论并要求澄清。

0

你将需要实现一个自定义的相机 - 看看Apple's SquareCam example

您将使用AVFoundation,将能够实现任何类型的自定义行为时拍摄照片(包括只停留在该相机页面) - 您甚至必须自己将其保存到照片库(SquareCam示例显示如何执行此操作)。这也意味着,如果您需要裁剪/调整大小控件,您必须自己创建它们,以及如果希望用户在拍摄照片后能够查看其照片,则还需要选择器视图(网格库视图)。

它可能是在中级以上的东西 - 我花了几天的时间来实现,但如果你的应用程序以任何方式专注于照片,这绝对是一种方式。让您完全控制相机的用户界面和行为。

哦,是的,你必须实现闪光灯按钮,快门按钮,快门效果,点击对焦,以及其他任何你自己。 AVFoundation基本上给你一个直管镜头(比喻)。

相关问题