2013-07-22 78 views
4

我使用的UIImagePickerController与自定义背景画面来记录我的应用程序的视频的UIImagePickerController startVideoCapture。对于UIImagePickerController的实现,我已经使用了代码great Ray Wenderlich tutorial.定制覆盖

我隐藏了摄像头的控件,并创建了一个简单的自定义覆盖视图。这工作和加载罚款。 我已经然后创建了一个工具栏和按钮的视图,录制视频:

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

所以“让记录”出现在日志中,但我收到一条错误NSInvalidArgumentException为startVideoCapture。我知道那里有什么明显错误的搭配方式即时通讯试图通过启动按钮按下视频拍摄,但我不能弄明白。如果解决方案很简单,那么请原谅我在iOS上还是一个新手! 干杯, 迈克

+0

如果你改变' - (空)recordPressed:(*的UIImagePickerController)picker'为' - (空)recordPressed:(ID)sender'做'的NSLog(@ “这是什么:%@”,发件人)'它可能会显示你是否是p分配一个'UIImagePickerController'或其他东西。 –

+0

[本回答关于照片(http://stackoverflow.com/a/36704374/3472073)。但是你可以用它进行视频太 –

回答

1

的问题是,你连接到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]; 
} 
+0

这个工作,非常感谢。 –

+0

我的荣幸!很高兴帮助:) –

0

其实我只是很快测试了它的一些代码,我已经得到了开,sender上的按钮按下你的行动是UIBarButtonItem *。因此,有几件事情可以做,你可以走下来的

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

根目录或设置tag变量为每个按钮和跳过图像检查,看看,而不是标签,这可能使逻辑更容易一点。