【问题标题】:iPhone Camera App - how to stay in Camera view?iPhone 相机应用程序 - 如何保持在相机视图中?
【发布时间】:2013-05-11 00:36:13
【问题描述】:

我已经在我的应用程序中使用默认的 showCameraControls = YES 实现了摄像头,我遇到的问题是当用户确认图像是 keeper 时,它会使用 [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

【问题讨论】:

    标签: iphone ios camera


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      哦,是的,您还必须自己实现闪光灯按钮、快门按钮、快门效果、点按对焦以及其他任何东西。 AVFoundation 基本上为您提供了通往相机镜头的直管(形象地)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多