【问题标题】:Subclassing UIImagePickerController for adding functionality子类化 UIImagePickerController 以添加功能
【发布时间】:2014-01-11 12:39:19
【问题描述】:

所以基本上我想要做的是,将“拍照”按钮更改为我的自定义按钮。 当用户改变 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 屏幕......一切都很好。

【问题讨论】:

    标签: ios iphone objective-c ios7 uiimagepickercontroller


    【解决方案1】:

    抱歉,您不能继承 UIImagePickerController。来自文档:

    重要提示:UIImagePickerController 类支持纵向模式 只要。此类旨在按原样使用,不支持 子类化。此类的视图层次结构是私有的,不能 被修改,只有一个例外。您可以将自定义视图分配给 cameraOverlayView 属性并使用该视图来呈现额外的 信息或管理相机界面之间的交互 和你的代码。

    但是,您可以完全控制拍照 UI。

    【讨论】:

    • 首先感谢您的回答!这究竟是什么意思?我的应用程序与子类化 UIImagePickerController 完美配合,苹果不会批准它吗?相机叠加层的问题,是您添加叠加层的问题,您无法像我尝试做的那样移动它。我正在制作“TakePic”按钮,旋转。
    • 这意味着你不应该继承UIImagePicker,你的自定义应该使用SDK推荐和支持的方法之一。如果你做子类UIImagePicker,根据你所做的视图操作,你可能会很幸运,事情会正常工作,但如果他们不这样做,你就处于不受支持的领域。
    【解决方案2】:

    UIImagePickerController 可以被子类化以添加属性以传递给UIImagePickerControllerDelegate 方法。我已经做到了,没有任何问题。但是不能玩弄它的方法或视图。

    【讨论】:

      猜你喜欢
      • 2010-11-22
      • 2013-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-30
      相关资源
      最近更新 更多