2013-06-03 6 views
6

Hintergrund:Wie im Fluge die Koordinaten eines popover ändern

Ich brauche eine popover von einem Imageview angezeigt werden (Rect nicht barbutton), die eine Suche field.The popover hat muss von einem vorgelegt werden UIModalPresentationFormSheet.This erreichte erfolgreich

Problem:

das Problem, das ich mit Blick auf bin (im Querformat-Modus) ist, wenn die Tastatur, um das Blatt modale Form Verschiebungen dargestellt und mit ihm meinem Rahmen für die popover. Daher bleibt das Popover i n seine ursprüngliche Position (bevor die Tastatur angezeigt wurde) und das präsentierte Rechteck ist nach oben verschoben. Die Lösung i angelegt ist (using presentPopoverFromRect) die popover in -(void)didShowKeyBoard:(NSNotification*) notif aus der veränderten rect zu vertreten und das gleiche tun in -(void)didhideKeyBoard:(NSNotification*) notif .Dies funktioniert gut, aber der Übergang ist sehr schnell und federnd. Also, wie kann ich einen reibungslosen Übergang dafür erreichen?

Was ich versucht habe

Ich habe versucht:

[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationCurve:UIViewAnimationCurveLinear]; 
[UIView setAnimationDuration:5.0f]; 
[_statePopover presentPopoverFromRect:stateHandler.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:NO]; 
[UIView commitAnimations]; 

aber es hat nicht funktioniert.

Kann mir bitte jemand auf die richtige Art und Weise leiten, dies zu tun?
Jede Hilfe wird sehr geschätzt.

+0

Haben Sie versucht, die Koordinaten des Popover entsprechend der Ausrichtung zu ändern? – Radu

+0

@Radu Im Porträt habe ich das oben genannte Problem nicht. In der Landschaft, wie ich in meiner Frage gesagt habe, stelle ich es von der rect dar, die bereits ihre Position verschoben hat. Das Popover übernimmt dann korrekt die neue Position des verschobenen Rect. Das Problem, dem ich gegenüberstehe, ist in seinem Übergang. Es ist nicht glatt. –

+0

Ich hatte diese Art von Problem an anderen Orten Versuchen Sie, den gesamten Übergangscode in eine UIView-Animation - ich habe diesen Trick für einige Tastatur eine Tischanimation vielleicht funktioniert es für Sie – Radu

Antwort

1

Nun, das hat mein Problem teilweise gelöst. Ich benutzte eine Versendung der popover presentation.It zu verzögern, wie weiter unten geht:

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, NSEC_PER_USEC), dispatch_get_current_queue(), ^{ 
    [_statePopover presentPopoverFromRect:statehandler.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES]; 
}); 

Dieser Bedarf funktioniert, wenn meine Tastatur des Feldes verwiesen, aber das gleiche Schnipsel nicht gewünschte Ergebnis zu liefern, wenn die Tastatur angezeigt wird.

Bitte hinterlassen Sie Kommentare, wenn jemand zufällig weiß, warum es sich so verhält.Vielen Dank !!