Die Animation innerhalb eines UIScrollView
Ich will den fade-out eine Blick, wie es ist scrollen innerhalb einer übergeordneten UIScrollview. Wenn die fade-out-animation beginnt, wird die scroll-view bewegt sich nicht mehr. Es springt in die richtige position, wenn der fade beendet ist.
Mein fade-out erreicht mit animateWithDuration und block-Objekte, ausgelöst auf einer Seite-Veränderung, die ich erkennen in scrollViewWillBeginDragging.
Weiß jemand, wie man Sie beide gleichzeitig passieren? Nur um klar sein, ich bin nicht 'animieren' der UIScrollView scrollen - sondern es geschieht über die Benutzer-Interaktion swiping.
EDIT:
Hier ist der code, den ich verwende, zu verblassen die UIView. Dieser code ist in einem UIViewController abgeleitete Klasse, die das delegate für eine UIScrollView. Wenn der Benutzer beginnt mit dem ziehen seine finger, ich will zu verblassen aus der Untersicht. Aber wenn der Benutzer beginnt, draggin einem finger, Untersicht verblasst und das scrollen Stoppt. Nach der Untersicht hat völlig ausgeblendet, die das scroll-Ansicht wird dann automatisch an den Ort, wo der dem finger des Benutzers ist.
-(void)scrollViewWillBeginDragging:(UIScrollView*)scrollView
{
[UIView animateWithDuration:0.5
animations:^
{
self.subView.alpha = 0.0f;
}
completion:^(BOOL finished) { }];
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
sehr interessant ... hab ich überprüft, und ja, ich habe die gleiche Wirkung ... Naja, es scheint, dass die animateWithDuration irgendwie blockiert den main thread ... das ist nicht logisch, und die Dokumentation sagt nichts über es entweder ..
Es gibt jedoch eine einfache Abhilfe, etwas ähnliches wie das hier: (ich habe die animation Dauer bis 3, so kann ich sehen, dass es arbeitet, während ich bewegen meine scroll-view 🙂 ...)
Ist ein wenig spät, aber wenn Sie möchten, um Blöcke, die Sie verwenden können:
animateWithDuration:delay:options:Animations:complete:
hinzufügen "UIViewAnimationOptionAllowUserInteraction", um Optionen zu ermöglichen, die Interaktion beim scrollen.
Ich bin mir sicher, dass Sie immer noch das lag-problem. Hier ist der beste Weg, ich kann es erklären. Bitte verzeihen Sie mir im Voraus mit, da bin ich wohl mit den falschen Begriffen. Alle Animationen laufen muss auf dem Haupt-thread. Wenn Sie anrufen, eine animation, iOS erste *P*rocesses dann ist es *R*enders, bevor es erzeugt *F*rames. Es sieht so aus.
PPPPRRRRFFFFFFFFFFFFFFFFFF
Aber da ScrollViews weiß nicht, wie lange die animation sein wird oder Wann es enden wird, es zu erfüllen hat die animation.
PRFPRFPRFPRFPRFPRFPRFPRF
Meine Theorie ist, dass die Verzögerung, die Sie erleben zu tun hat mit diesen zwei Anrufe kollidieren auf dem main-thread zur gleichen Zeit. Ich bin mir nicht sicher, wie Sie Sie lösen würde dieses problem anders als mit einem schnelleren chip. Ich habe, den man drücken könnte eine animation auf der CPU und einer auf der GPU, aber ich bin nicht so Fortgeschritten im Programmieren noch.
Ich würde vorschlagen, da die Deckkraft basiert auf den Fingern des Nutzers, die Bewegungen in der UIScrollView, über die delegate-Methode scrollViewDidScroll:. Die scrollView als parameter übergeben kann verwendet werden, um zu überprüfen, die contentOffset die einfach ein CGPoint, der angibt, wie weit in der Inhalts-Ansicht von der UIScrollView hat der user gescrollt werden. So etwas kann verwendet werden, beziehen sich auf die scroll-position, um die Deckkraft einer bestimmten Ansicht in einem paginierten UIScrollView:
Laut Informationen, die noch nicht zugelassen zu sein weithin veröffentlicht, die alle iOS 4.x-Versionen vollständig blockieren, Benutzer-Interaktion, während die animation läuft.
Ist es nicht interessant, obwohl, dass sind Sie UITouches sind offensichtlich immer noch registriert, die während der animation? Hmm... vielleicht sind das HINWEISE darauf, dass etwas NEUES kommt, ein noch-zu-sein-freigegebene version!
I. e., Wenn Sie können, Lesen Sie die iOS 5 Beta Dokumentation auf UIView-Klasse Methoden.