UIImagePickerController startVideoCapture mit benutzerdefiniertem Overlay

Ich verwende UIImagePickerController mit einer benutzerdefinierten Überlagerung, um ein Video in meiner App aufzunehmen. Für die Implementierung des UIImagePickerControllers habe ich den Code von a verwendettolles Ray Wenderlich Tutorial.

Ich habe die Steuerelemente für die Kamera ausgeblendet und eine einfache benutzerdefinierte Overlay-Ansicht erstellt. Das hat geklappt und lädt prima. Ich habe dann eine Symbolleiste und Schaltflächen für die Ansicht erstellt, um das Video aufzunehmen:

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

Mein KnopfrecordBarButtonItem AnruferecordPressed was gegeben ist durch:

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

Daher wird im Protokoll die Meldung "Aufzeichnen lassen" angezeigt, es wird jedoch ein NSInvalidArgumentException-Fehler für startVideoCapture angezeigt. Ich weiß, dass etwas offensichtlich falsch ist, wenn ich versuche, die Videoaufnahme durch Drücken eines Knopfes zu starten, aber ich kann es nicht herausfinden. Noch ein ziemlicher Neuling bei iOS, verzeihen Sie mir, wenn die Lösung einfach ist! Prost, Mike

Antworten auf die Frage(2)

Ihre Antwort auf die Frage