4 Stimmen

CameraOverlayView über Auslöseranimation

Ich habe eine transparente Ansicht mit einem Rechteck darauf gezeichnet mit CoreGraphics. Wenn die Kamera startet, ist die benutzerdefinierte Overlay-Ansicht über der Verschlussanimation. Was Sie sehen, ist der Standard-Kameraverschluss mit dem benutzerdefinierten Rechteck darüber. Wie kann ich es an die richtige Stelle bringen, unterhalb der Verschlussanimation? Ich habe mir anderen Beispielcode angesehen, aber es ist für OS 3.1 und scheint nichts anders zu tun.

Hier ist mein Code:

-(IBAction)cameraButton{
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerCameraDeviceRear]){

    UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    picker.delegate = self;
    picker.sourceType =  UIImagePickerControllerSourceTypeCamera;

    //Fügen Sie die OverlayView mit dem benutzerdefinierten Rechteck hinzu
    CGRect overlayFrame = CGRectMake(0.0f, 0.0f, 320.0f, 480.0f);
    OverlayView *overlayView = [[OverlayView alloc]initWithFrame:overlayFrame];
    picker.cameraOverlayView = overlayView;
    [overlayView release];

    [self presentModalViewController:picker animated:YES];
    [picker release];
}
}

2voto

Xithias Punkte 981

Auf dem iPad tritt dieses Problem nicht auf, und die Overlay-Ansicht befindet sich standardmäßig hinter der Verschlussanimation. Aber auf dem iPhone erscheint das Overlay im Vordergrund.

Ich habe eine Lösung gefunden, die für mich funktioniert hat.

Sie müssen Ihre Overlay-Ansicht als Unteransicht in dieser Methode festlegen:

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
    if (!viewController)
        return;

    UIView* controllerViewHolder = viewController.view;
    UIView* controllerCameraView = [[controllerViewHolder subviews] objectAtIndex:0];
    UIView* controllerPreview = [[controllerCameraView subviews] objectAtIndex:0];
    [controllerCameraView insertSubview:self.overlayView aboveSubview:controllerPreview];
}

Ich hoffe, das hilft

Originalquelle: http://www.alexcurylo.com/blog/2009/06/18/uiimagepickercontroller-in-3-0/

1voto

Anomie Punkte 89467

Sie dürfen nichts anderes tun, als das, was Sie bereits tun; wenn iOS entscheidet, Ihre Überlagerungsansicht über den Verschluss zu legen, müssen Sie das einfach akzeptieren (es sei denn, Sie möchten riskieren, aus dem App Store abgelehnt zu werden).

Als unvollkommener Workaround könnten Sie Ihre Überlagerung mit alpha=0 starten und dann alpha nach einer oder zwei Sekunden auf 1 setzen. Es gibt jedoch keine festgelegte Zeitdauer, für die der Verschluss erscheint, bevor er 'öffnet' (ich glaube, es hängt davon ab, wie lange die Initialisierung der Kamerahardware dauert), daher kann es manchmal passieren, dass Ihre Benutzeroberfläche erst spät erscheint und manchmal zu früh.

0 Stimmen

Hmm. Mir gefällt dein Denken hinsichtlich der Lösung, aber wie du bereits angemerkt hast, wird es nicht funktionieren.

0voto

Allen Pike Punkte 6097

Ab 4.3.3 ist die Verschlussanimation defekt, weil Elemente oben angezeigt werden und dann nach unten schnappen, wenn die Animation beginnt. Ich habe dies als Radar eingereicht: http://openradar.appspot.com/radar?id=1204401

0voto

Greg Punkte 33150

Ich habe eine ähnliche Frage hier beantwortet. Was für mich funktioniert hat (in iOS 6), war das Setzen der cameraOverlayView in navigationController:willShowViewController:animated.

- (void) navigationController:(UINavigationController*) navigationController willShowViewController:(UIViewController*) viewController animated:(BOOL) animated {
    self.imagePickerController.cameraOverlayView = ...; // deine Kamera-Overlay-Ansicht
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X