Animieren einer UIView-Rahmen, Untersicht UIScrollView nicht immer animieren
In diese Beispiel.
Ich bin zu animieren, die PhotoViewerViewController Rahmen, wenn ich animieren, aus der tabBarController (für Vollbild-Effekt). Der PhotoViewer verwendet eine uiscrollview generieren, die gleiche Art von Effekt apples Fotos-app hat. Aus welchem Grund auch immer manchmal ist es animiert, zusammen mit meiner PhotoViewer Rahmen, und manchmal nicht.
Sehen Sie im ersten Beispiel springt es beim erhöhen der frame-Größe, aber animiert schön wenn die Verringerung der Bildgröße (und wiederherstellen der tab-Leiste).
Jedoch in diese Beispiel, wenn das Foto vertikal springt in beide Richtungen.
In beiden Fällen, wenn ich Zoomen Sie in das Bild mit der scrollview, es korrekt animiert in beide Richtungen.
Ich weiß, der Beweis ist da, aber ich kann nicht meine finger auf, was hier passiert.
Hier ist meine animation block:
void (^updateProperties) (void) = ^ {
self.navigationController.navigationBar.alpha = hidden ? 0.0f : 1.0f;
self.navigationController.toolbar.alpha = hidden ? 0.0f : 1.0f;
if (self.tabBarController) {
int height = self.tabBarController.tabBar.bounds.size.height;
for(UIView *view in self.tabBarController.view.subviews)
{
int newHeight;
UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
if (UIInterfaceOrientationIsPortrait(orientation)) {
newHeight = hidden ? [[UIScreen mainScreen] bounds].size.height : [[UIScreen mainScreen] bounds].size.height - height;
} else {
newHeight = hidden ? [[UIScreen mainScreen] bounds].size.width : [[UIScreen mainScreen] bounds].size.width - height;
}
if([view isKindOfClass:[UITabBar class]])
{
[view setFrame:CGRectMake(view.frame.origin.x, newHeight, view.frame.size.width, view.frame.size.height)];
}
else
{
CGRect newFrame = CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, newHeight);
[view setFrame:newFrame];
//update our VC frame with animation
[self.view setFrame:newFrame];
}
}
}
};
Code angepasst von einem Beitrag SO: UITabBar nicht verstecken
Vollständige Quelle auf github.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Im Allgemeinen, wenn die Animationen manchmal funktioniert und manchmal nicht, es ist, weil in letzterem Fall eine verzögerte ausführen, wodurch Sie effektiv abgebrochen, wenn die Immobilie an seinen endgültigen Wert.
In dem besonderen Fall der
UIScrollView
es passiert oft, dass-layoutSubviews
heißt ohne animation einer Schlinge, nachdem Sie Ihre animation Blöcke geschlossen haben. Aus diesem Grund habe ich in der Regel versuchen zu vermeiden, tun jedem layout, dass die Methode, wo ich einUIScrollView
in der view-Hierarchie (weil besonders vor iOS 5UIScrollView
ist wirklich trigger-happy auf Einstellung selbst zu brauchen, layout).Ich würde empfehlen, das entfernen der Aufruf
-[EGOPhotoImageView layoutScrollViewAnimated:]
aus-layoutSubviews
und fügen Sie es auf eine überschriebene-setFrame:
statt.Wenn du kannst iOS4 und oben, werfen Sie einen Blick auf
UIViewAnimationOptionLayoutSubviews
zu. Mit einem block-basierten animation mit dieser option könnte funktionieren, ohne etwas zu ändern sonst.Ich habe versucht, Ihr github-code auf dem iPad 4.2 und 4.3 Simulatoren und es funktioniert einwandfrei... kein ändern der Bildgröße überhaupt! Möglicherweise gibt es in irgendeiner version Probleme.
Auch habe ich versucht eine änderung Ihrer Animationen-block und das folgende dient dem gleichen Zweck:
Lassen Sie mich wissen, wenn ich etwas fehlt 🙂