【问题标题】:UIImagePickerController Change Camera Source via delegate?UIImagePickerController 通过委托更改相机源?
【发布时间】:2011-05-31 21:39:03
【问题描述】:

我希望能够通过按钮更改 UIImagePickerControllerCameraDevice。我想使用的 Button 放置在 ImagePicker 运行时显示在其顶部的叠加层中。

我知道这将需要我使用委托,但我对委托的了解非常少。有人能指出我正确的方向吗?

这是我用于 UIImagePickerController“GetPhoto”的代码,它检查设备是否有摄像头,并在启动时根据您可用的摄像头启用正确的摄像头,如果没有,它会为您提供相机胶卷。

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

    if((UIButton *) sender == takePictureButton) {
        overlayViewController *overlay = [[overlayViewController alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGTH)];

        if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])  {
            picker.sourceType = UIImagePickerControllerSourceTypeCamera;

            if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerCameraDeviceFront]) {
                picker.cameraDevice = UIImagePickerControllerCameraDeviceFront;

            }
            else {
                picker.cameraDevice = UIImagePickerControllerCameraDeviceRear;
            }

            picker.cameraOverlayView = overlay; 
       }
       else {
            picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
            picker.allowsEditing = YES;
        }
    }
    [self presentModalViewController:picker animated:YES];
    [picker release];
}

【问题讨论】:

    标签: iphone objective-c ios delegates uiimagepickercontroller


    【解决方案1】:

    由于您使用的是与叠加层关联的视图控制器,因此您可以在叠加层视图控制器中为图像选择器控制器定义一个属性,可能是 assigned 而不是 retained 并定义其中按钮的操作覆盖视图控制器影响该属性引用的图像选择器控制器实例。

    【讨论】:

    • 好的,所以我添加了一个像这样的@property @ property (nonatomic,assign) UIImagePickerController *picker; 然后像这样的函数 -(void)buttonPressed { NSLog(@"Change Camera Now"); picker.cameraDevice = UIImagePickerControllerCameraDeviceRear; } 我不知道这如何链接到 mainViewController?
    • 不久之后overlayViewController *overlay = [[overlayViewController alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGTH)];overlay.picker = picker;
    • 保留完全没问题。赋值不是。当图像选择器获取 dealloc 时,assign 可能并且可能会导致您的应用程序崩溃,因为该属性仍将指向不存在的选择器的地址。如果必须,请改用弱。
    • assign 用于非面向对象的东西,如结构和 typdef。正如以撒所说,使用弱或强。请不要发布这样荒谬的东西。
    猜你喜欢
    • 1970-01-01
    • 2017-07-07
    • 2018-08-26
    • 2012-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多