繁体   English   中英

iPhone Camera App-如何保持在相机视图中?

[英]iPhone Camera App - how to stay in Camera view?

我已经使用默认的showCameraControls = 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

为了实现这一点,您将必须实现自己的拍照方法,因为此默认按钮会导致视图自行关闭。

显然,您可以通过设置showsCameraControls = NO来做到这一点,但是随后您将不得不重新创建仍然需要的所有其他功能。

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

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

您将需要实现自定义相机-查看Apple的SquareCam示例

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

它可能是围绕中级水平的东西-我花了几天的时间来实现,但是如果您的应用程序以任何方式都专注于照片,那肯定是要走的路。 使您可以完全控制相机的UI和行为。

哦,是的,您还必须实现闪光灯按钮,快门按钮,快门效果,点击对焦以及您自己的其他任何功能。 AVFoundation基本上为您提供了一条通向摄像机镜头的直管(如图所示)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM