iPhone相机应用程序 - 如何保持相机视图?

时间:2013-05-10 16:17:01

标签: iphone ios camera

我已经使用默认的showsCameraControls = YES在我的应用程序内部实现了相机,而我遇到的问题是当用户确认图像是守护者时,它会使用[self.delegate didFinishWithCamera]解散相机。我希望保留在“相机”视图中,直到用户完成拍照。如果没有[self.delegate didFinishWithCamera],应用程序会在用户确认他们想要保留照片并且永远不会返回实时摄像头源后挂起。如何保持相机视图?感谢您的帮助!

@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

2 个答案:

答案 0 :(得分:0)

为了实现这一点,你必须实现自己的拍照方法,因为这个默认按钮会导致视图自动消失。

显然,你可以通过设置showsCameraControls = NO来做到这一点,但是你必须重新创建你仍然想要的所有其他功能。

我从来没有这样做过,但是应该可以让showsCameraControls = YES并使用cameraOverlayView简单地在现有的上面叠加相同的“拍照”按钮。如果你这样做,你只需要让那个按钮从你的UIImagePickerViewController实例中调用方法-takePicture。

希望这已经足够了,请随时发表评论并要求澄清。

答案 1 :(得分:0)

您需要实施自定义相机 - 请查看Apple's SquareCam example

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

这可能是中等水平的东西 - 花了我几天的时间来实现,但如果你的应用程序以任何方式专注于照片,这绝对是要走的路。使您可以完全控制相机的用户界面和行为。

哦,是的,你必须实现闪光按钮,快门按钮,快门效果,点按以对焦,以及其他任何你自己。 AVFoundation基本上可以为您提供相机镜头的直管(比喻)。