繁体   English   中英

子类化UIImagePickerController以添加功能

[英]Subclassing UIImagePickerController for adding functionality

所以基本上我要做的是,将“拍摄图像”的按钮更改为我的自定义按钮。 当用户更改DeviceOrientation时,按钮将根据方向改变。 我已经尝试过使用“overLay”属性,但是一旦放置它就似乎无法改变或移动“overLay”。 所以我决定继承UIImagePickerController的子类,但是当我把它叫出来时,相机根本就不会显示!

任何帮助理解什么是问题将有所帮助...谢谢!!

这是viewController调用子类“UIImagePickerController”:

@interface CameraViewController : UIViewController<UIImagePickerControllerDelegate>
@interface CameraViewController ()
@property (nonatomic) pickerControllerMC *cameraPickerView;

self.cameraPickerView = [[pickerControllerMC alloc]initWithNibName:@"pickerControllerMC"       bundle:nil];
self.cameraPickerView.delegate = self;


// Do any additional setup after loading the view.
//create a new image picker instance
//set source to video!
self.cameraPickerView.sourceType = UIImagePickerControllerSourceTypeCamera;
//hide all controls
self.cameraPickerView.showsCameraControls = NO;
self.cameraPickerView.navigationBarHidden = YES;
self.cameraPickerView.toolbarHidden = YES;
//  self.delegate = self;
//make the video preview full size
self.cameraPickerView.wantsFullScreenLayout = YES;
self.cameraPickerView.cameraViewTransform =
CGAffineTransformScale(self.cameraPickerView.cameraViewTransform,
                       CAMERA_TRANSFORM_X,
                       CAMERA_TRANSFORM_Y);

//Getting WidthAnd hight
CGRect screen = [[UIScreen mainScreen] bounds];
//CGFloat widthInPixel = screen.size.width * scaleFactor;
//CGFloat heightInPixel = screen.size.height * scaleFactor;
int Width = screen.size.width;
int hight = screen.size.height;

[self presentViewController:self.cameraPickerView animated:YES completion:nil];

这是子类:

 @interface pickerControllerMC : UIImagePickerController

 @implementation pickerControllerMC

    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
    {
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
    }

    - (void)viewDidLoad
     {
    [super viewDidLoad];

    UIButton *buttonTakeImage = [UIButton
                        buttonWithType:UIButtonTypeRoundedRect];
    [buttonTakeImage setBackgroundImage:[UIImage imageNamed:@"CameraButton@2x"]     forState:UIControlStateNormal];

    [buttonTakeImage addTarget:self action:@selector(takePictureClicked)     forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:self.overlay];
    [self.view addSubview:buttonTakeImage];


    //Adding orientation Notifications!
    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
    [[NSNotificationCenter defaultCenter] addObserver: self selector:        @selector(deviceOrientationDidChange:) name: UIDeviceOrientationDidChangeNotification object: nil];


    }

编辑

好吧我的错误是,我使用“initWithNibName”,所以我每次都有一个白色的Nib屏幕..一切都很好。

对不起,你不能UIImagePickerController子类。 来自文档:

重要说明:UIImagePickerController类仅支持纵向模式。 此类旨在按原样使用,不支持子类化。 此类的视图层次结构是私有的,不得修改,但有一个例外。 您可以将自定义视图分配给cameraOverlayView属性,并使用该视图显示其他信息或管理相机界面与代码之间的交互。

但是,您可以完全控制拍摄UI的图片。

可以对UIImagePickerController进行子类化以添加要传递给UIImagePickerControllerDelegate方法的属性。 我做到了没有任何问题。 但是人们无法使用它的方法或观点。

暂无
暂无

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

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