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