在Xcode中创建简单的相机覆盖层,如何操作?

9

如标题所述,我需要在使用UIImagePickerController拍照时创建一个非常简单的相机叠加层。 我想在相机上添加非常简单的.png文件(如空框),但我无法弄清楚如何做到这一点。

我已经检查了此网页中的大多数教程,但大多数都不理解。 对我来说似乎非常困难,在相机叠加层中添加一个简单的.png文件应该比那更容易。

(IBAction) getPhoto:(id) sender {
    UIImagePickerController * picker = [[UIImagePickerController alloc] init];
    picker.delegate = self;

    if((UIButton *) sender == choosePhotoBtn) {
        picker.sourceType = UIImagePickerControllerSourceTypeCamera;
    } else {

    }

    label1.text =@"PHOTO ACTION";

    [self presentModalViewController:picker animated:YES];
}

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    [picker dismissModalViewControllerAnimated:YES];
    imageView.image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
}

我应该在哪里实现我的叠加代码?我应该使用哪些类,如何实现?

1个回答

15

UIImagePickerController有一个叫做cameraOverlayView的属性,它是一个UIView*类型的变量,所以你需要创建一个UIView对象,并将PNG图片设置为其背景,然后将其赋值给picker的这个属性。

下面是代码(我没有测试过):

(IBAction) getPhoto:(id) sender 
{
    UIImagePickerController * picker = [[UIImagePickerController alloc] init];
    picker.delegate = self;

    // creating overlayView
    UIView* overlayView = [[UIView alloc] initWithFrame:picker.view.frame];
    // letting png transparency be
    overlayView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"yourimagename.png"]];
    [overlayView.layer setOpaque:NO];
    overlayView.opaque = NO;

    picker.showsCameraControls = NO;
    picker.cameraOverlayView = overlayView;

    if((UIButton *) sender == choosePhotoBtn) 
    {
         if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
         {
             [picker setSourceType:UIImagePickerControllerSourceTypeCamera];
         } else {
             //do something if the device has no camera or if the camera is disabled in settings (it cannot be assumed that the camera is available/not broken)
         }
    } else {

    }

    label1.text =@"PHOTO ACTION";

    [self presentModalViewController:picker animated:YES];
}

当然,您可以使用一些自定义的UIView*子类来替代创建标准的UIView* overlayView,但其他所有内容都将保持不变。


这段程序相关的内容翻译成中文如下:怎样实现?我的意思是在哪里应该实现相机叠加视图代码? - bugra sezer
这是您的画面 = 我创建并命名为cameraovarlayview的视图控制器?那么,您的代码来显示选取器在哪里?看看这个例子,它太复杂了,我只想在屏幕中央显示一个简单的PNG,就像太阳的链接一样,而不是其他按钮。http://mworldapps.com/custom-camera-overlay-view-for-uiimagepickercontroller-how-to-block-pinch-zoom-2/ - bugra sezer
你的意思是什么?你不需要创建其他任何东西。很可能,你会将它设置为 picker.view.frame - dreamzor
picker.frame 怎么设置?顺便感谢你们迄今为止的答案。 - bugra sezer
这个程序崩溃了 *** 由于未捕获的异常 'NSInvalidArgumentException',原因是:'源类型必须为UIImagePickerControllerSourceTypeCamera' *** - KarenAnne
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接