Ich versuche, ein UIWebView von rechts auf den Bildschirm zu animieren, wenn ein Link angetippt wird. Dafür benutze ich zwei UIViews. Eines namens onScreenWebView und ein anderes namens offScreenWebView. Die Idee ist, dass ich das offscreenWebView von rechts auf den Bildschirm animieren und das onScreenWebView nach links vom Bildschirm animieren kann. Dann tausche ich die Ansichten aus (damit die Ansicht auf dem Bildschirm das onScreenWebView wird und umgekehrt), aber meine Animation hat Probleme. Ich muss beachten, dass es beim ERSTEN MAL großartig funktioniert. Danach funktioniert es überhaupt nicht gut.
Die Ansichten sind wie folgt ausgerichtet
__________ __________
| | | |
| on | | off |
| screen | | screen |
|________| |________|
Hier ist der Animationscode :
offScreenWebView.hidden = true;
offScreenWebView.frame = self.frame;
[offScreenWebView offSetX:self.bounds.size.width + kOffsetPadding]; // bewege offscreen nach rechts
[self logWebRects:"begin"];
offScreenWebView.hidden = false;
[self bringSubviewToFront:offScreenWebView];
[UIView animateWithDuration:0.5f delay:0.0f options:UIViewAnimationCurveEaseInOut animations:^{
[self logWebRects:"during 1"];
offScreenWebView.frame = self.frame;
onScreenWebView.frame = CGRectMake(-(self.bounds.size.width + kOffsetPadding), 0, onScreenWebView.bounds.size.width, onScreenWebView.bounds.size.height);
[self logWebRects:"during 2"];
}completion:^(BOOL finished) {
[self logWebRects:"finished b4 swap"];
[self swapWebViews];
[self logWebRects:"finished -- done"];
}];
Hier ist die Ausgabe meiner logWebRects-Methode (nur der Ursprung jeder Ansicht)
Navigate Typ :: Link angeklickt
Rahmen von self frame :: {{0, 0}, {320, 460}}
99 -- Punkt des Ursprungs offscreen begin :: {335, 0}
0 -- Punkt des Ursprungs onscreen begin :: {0, 0}
99 -- Punkt des Ursprungs offscreen während 1 :: {335, 0}
0 -- Punkt des Ursprungs onscreen während 1 :: {0, 0}
99 -- Punkt des Ursprungs offscreen während 2 :: {0, 0}
0 -- Punkt des Ursprungs onscreen während 2 :: {-335, 0}
Navigationsart :: Anderes
99 -- Punkt des Ursprungs offscreen finished b4 swap :: {0, 0}
0 -- Punkt des Ursprungs onscreen finished b4 swap :: {-335, 0}
0 -- Punkt des Ursprungs offscreen finished -- done :: {-335, 0}
99 -- Punkt des Ursprungs onscreen finished -- done :: {0, 0}
Navigationstyp :: Link angeklickt
Rahmen von self frame :: {{0, 0}, {320, 460}}
0 -- Punkt des Ursprungs offscreen begin :: {335, 0}
99 -- Punkt des Ursprungs onscreen begin :: {0, 0}
0 -- Punkt des Ursprungs offscreen während 1 :: {335, 0}
99 -- Punkt des Ursprungs onscreen während 1 :: {0, 0}
0 -- Punkt des Ursprungs offscreen während 2 :: {0, 0}
99 -- Punkt des Ursprungs onscreen während 2 :: {-335, 0}
Navigationstyp :: Anderes
0 -- Punkt des Ursprungs offscreen finished b4 swap :: {335, 0}
99 -- Punkt des Ursprungs onscreen finished b4 swap :: {0, 0}
99 -- Punkt des Ursprungs offscreen finished -- done :: {0, 0}
0 -- Punkt des Ursprungs onscreen finished -- done :: {335, 0}
Diese Logs stammen vom ersten Durchlauf. Dann auch vom zweiten Durchlauf. Sie werden feststellen, dass aus irgendeinem Grund der Animationsblock den Rahmen jeder Webansicht kurz vor dem Abschlussblock zurücksetzt.
Ich sollte erwähnen, dass ich die Webansichten mit einem klassischen Temporärvariablentausch tausche. Außerdem handelt es sich um gleichrangige Ansichten.