iphone - 带有自定义覆盖的 UIImagePickerController startVideoCapture

标签 iphone ios uiimagepickercontroller

我正在使用带有自定义叠加层的 UIImagePickerController 在我的应用程序中录制视频。对于 UIImagePickerController 的实现,我使用了来自 great Ray Wenderlich tutorial. 的代码。

我隐藏了相机的控件,并创建了一个简单的自定义叠加 View 。这已经奏效并且加载正常。 然后我为 View 创建了一个工具栏和按钮,以录制视频:

- (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;
}

我的按钮 recordBarButtonItem 调用 recordPressed 由以下方式给出:

- (void) recordPressed: (UIImagePickerController *) picker {
NSLog(@"lets record");
[picker startVideoCapture]; 
}

因此“让记录”出现在日志中,但我收到 startVideoCapture 的 NSInvalidArgumentException 错误。我知道我尝试通过按下按钮开始视频捕获的方式显然有问题,但我无法弄清楚。仍然是 iOS 的新手,所以如果解决方案很简单,请原谅我! 干杯, 迈克

最佳答案

问题是您附加到 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]; 
}

关于iphone - 带有自定义覆盖的 UIImagePickerController startVideoCapture,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17789854/

相关文章:

ios - 仅为 10-20 个最终用户轻松分发 iOS 应用程序

ios - 如何在 UIActionSheet 中呈现 UIImagePickerViewController?

ios - 如何检测类型对于通用 propertyWrapper 是可选的

objective-c - 将 UIImageView 置于 UIView 之上,需要说明

ios - UIImagePickerController 在相机胶卷中打开

ios - 删除 iphone 中的 "choose from gallary"选项?

iphone - 如何在 MFMailComposeViewController 的 MailComposer 工作表中添加 UIImage

ios - 在不同位置的 UICollectionView 单元格上添加标签 iOS

iphone - 如何取消之前在 Objective-C 中安排的事件?

iphone - [[NSMutableDictionary alloc] initWithObjects :. ..] 和 [NSMutableDictionary DictionaryWithObjects :. ..] 之间的区别?