Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone UIImagePickerController startVideoCapture和自定义覆盖_Iphone_Ios_Uiimagepickercontroller - Fatal编程技术网

Iphone UIImagePickerController startVideoCapture和自定义覆盖

Iphone UIImagePickerController startVideoCapture和自定义覆盖,iphone,ios,uiimagepickercontroller,Iphone,Ios,Uiimagepickercontroller,我正在使用带有自定义覆盖的UIImagePickerController在我的应用程序中录制视频。对于UIImagePickerController的实现,我使用了 我已经隐藏了相机的控件,并创建了一个简单的自定义覆盖视图。这已经起作用了,负载也很好。 然后,我为视图创建了一个工具栏和按钮,用于录制视频: - (BOOL) startCameraControllerFromViewController: (UIViewController*) controller

我正在使用带有自定义覆盖的UIImagePickerController在我的应用程序中录制视频。对于UIImagePickerController的实现,我使用了

我已经隐藏了相机的控件,并创建了一个简单的自定义覆盖视图。这已经起作用了,负载也很好。 然后,我为视图创建了一个工具栏和按钮,用于录制视频:

- (BOOL) startCameraControllerFromViewController: (UIViewController*) controller
                               usingDelegate: (id <UIImagePickerControllerDelegate,
                                               UINavigationControllerDelegate>) delegate {

if (([UIImagePickerController isSourceTypeAvailable:
      UIImagePickerControllerSourceTypeCamera] == NO)
    || (delegate == nil)
    || (controller == nil))
    return NO;


UIImagePickerController *cameraUI = [[UIImagePickerController alloc] init];
cameraUI.sourceType = UIImagePickerControllerSourceTypeCamera;

// Displays a control that allows the user to choose movie capture
cameraUI.mediaTypes = [[NSArray alloc] initWithObjects: (NSString *) kUTTypeMovie, nil];

// Hides the controls for moving & scaling pictures, or for
// trimming movies. To instead show the controls, use YES.
cameraUI.allowsEditing = NO;

cameraUI.delegate = delegate;

//Overlay view and toolbar setup 
// creating overlayView
UIView* overlayView = [[UIView alloc] initWithFrame:cameraUI.view.frame];
// letting png transparency be
float width = 320;
float AR = (4.0/3.0);

float toolbar_height = 480 - (AR*width);


UIToolbar *toolBar=[[UIToolbar alloc]initWithFrame:CGRectMake(0, (AR*width), 320, toolbar_height)];
//toolBar.tintColor = [UIColor colorWithRed:(252/255.) green:(0/255.) blue:(48/255.) alpha:1];
toolBar.tintColor = [UIColor colorWithRed:(49/255.) green:(52/255.) blue:(49/255.) alpha:1];


UIBarButtonItem *flexibleSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
UIBarButtonItem *RecordBarButtonItem = [[UIBarButtonItem alloc ] initWithBarButtonSystemItem:UIBarButtonSystemItemCamera target:self action:@selector(recordPressed:)];
UIBarButtonItem *CancelBarButtonItem = [[UIBarButtonItem alloc ] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(imagePickerControllerDidCancel:)];
NSArray *buttons = [NSArray arrayWithObjects: CancelBarButtonItem, flexibleSpace, RecordBarButtonItem, flexibleSpace, nil];
[toolBar setItems: buttons animated:NO];

[overlayView addSubview:toolBar];
[overlayView.layer setOpaque:NO];
overlayView.opaque = NO;

cameraUI.showsCameraControls = NO;
cameraUI.cameraOverlayView = overlayView;

[controller presentViewController: cameraUI animated: YES completion:nil];
return YES;
}
因此“lets record”出现在日志上,但我收到startVideoCapture的NSInvalidArgumentException错误。我知道我试图通过按下按钮来开始视频捕获的方式有明显的问题,但我想不出来。还是个iOS新手,所以如果解决方案简单,请原谅我! 干杯
Mike

事实上,我刚刚在打开的一些代码中快速测试了它,您按下按钮时的
发送方
uibarbuttoneim*
。所以有两件事你可以做,你可以从根本上

UIBarButtonItem *senderButton = (UIBarButtonItem *)sender; 
if(senderButton.image == UIBarButtonSystemItemCamera)
{
   //Handle behaviour
}

或者为每个按钮设置
tag
变量,并跳过图像检查,转而查看标记,这可能会使逻辑变得更简单。

问题在于,附加到
initWithBarButtonSystemItem
调用的操作不会传递
UIImagePickerController
实例

我要做的是将UIImagePickerController设置为类的属性,并通过操作访问该属性,如下所示:

在您的.h中:

@property (nonatomic, strong) UIImagePickerController *cameraUI;
在您的.m中:

- (BOOL) startCameraControllerFromViewController: (UIViewController*) controller
                           usingDelegate: (id <UIImagePickerControllerDelegate,
                                           UINavigationControllerDelegate>) delegate {

    ...

    self.cameraUI = [[UIImagePickerController alloc] init];

    ...

    UIBarButtonItem *RecordBarButtonItem = [[UIBarButtonItem alloc ] initWithBarButtonSystemItem:UIBarButtonSystemItemCamera target:self action:@selector(recordPressed)]; // Removed the ':'

    ...
}


- (void) recordPressed {
    NSLog(@"lets record");
    [self.cameraUI startVideoCapture]; 
}
-(BOOL)startCameraControllerFromViewController:(UIViewController*)控制器
usingDelegate:(id)delegate{
...
self.cameraUI=[[UIImagePickerController alloc]init];
...
UIBarButtonItem*RecordBarButtonItem=[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemCamera目标:自我操作:@selector(recordPressed)];//删除了“:”
...
}
-(作废)记录已按下{
NSLog(@“lets record”);
[self.cameraUI startVideoCapture];
}

如果将
-(void)recordPressed:(UIImagePickerController*)picker
更改为
-(void)recordPressed:(id)sender
并执行
NSLog(@“What's:%@”,sender)
它可能会显示您是否正在传递
UIImagePickerController
或其他内容。。但是你可以用它来做视频,我很乐意!很高兴这有帮助:)
- (BOOL) startCameraControllerFromViewController: (UIViewController*) controller
                           usingDelegate: (id <UIImagePickerControllerDelegate,
                                           UINavigationControllerDelegate>) delegate {

    ...

    self.cameraUI = [[UIImagePickerController alloc] init];

    ...

    UIBarButtonItem *RecordBarButtonItem = [[UIBarButtonItem alloc ] initWithBarButtonSystemItem:UIBarButtonSystemItemCamera target:self action:@selector(recordPressed)]; // Removed the ':'

    ...
}


- (void) recordPressed {
    NSLog(@"lets record");
    [self.cameraUI startVideoCapture]; 
}