Animation in einem UIScrollView

8

Ich möchte eine Ansicht ausblenden, während sie in einem übergeordneten UIScrollview scrollt. Wenn die Fade-Out-Animation beginnt, hört die Bildlaufansicht auf, zu scrollen. Wenn die Überblendung abgeschlossen ist, springt sie zur richtigen Position.

Meine Ausblendung wird mit animateWithDuration und Blockobjekten erreicht, die bei einer Seitenänderung in scrollViewWillBeginDragging ausgelöst werden.

Weiß jemand, wie man beide gleichzeitig macht? Nur um klar zu sein, animiere ich das UIScrollView-Scrollen nicht - vielmehr geschieht es durch Benutzerinteraktion beim Swipen.

BEARBEITEN:

Hier ist der Code, mit dem ich die UIView verblasse. Dieser Code befindet sich in einer von UIViewController abgeleiteten Klasse, bei der es sich um den Delegaten für ein UIScrollView handelt. Wenn der Benutzer beginnt, seinen Finger zu ziehen, möchte ich die Unteransicht ausblenden. Wenn der Benutzer jedoch mit dem Finger einen Finger drückt, wird die Unteransicht ausgeblendet und der Bildlauf angehalten. Nachdem die Unteransicht vollständig ausgeblendet wurde, wird die Bildlaufansicht an der Position ausgerichtet, an der sich der Finger des Benutzers befindet.

%Vor%     
OpenUserX03 14.04.2011, 07:16
quelle

4 Antworten

10

sehr interessant ... Ich habe das überprüft, und ja, ich habe den gleichen Effekt ... Nun, es scheint, dass die animateWithDuration irgendwie den Haupt-Thread blockiert ... was nicht logisch ist und die Dokumentation nicht sag auch nichts darüber .. Allerdings gibt es eine einfache Problemumgehung, etwas Ähnliches: (Ich habe die Animationsdauer auf 3 gesetzt, damit ich sehen kann, dass es funktioniert, während ich meine Bildlaufansicht verschiebe :) ...)

%Vor%     
Moszi 16.04.2011, 20:44
quelle
13

Etwas spät, aber wenn Sie weiterhin Blöcke verwenden möchten, können Sie Folgendes verwenden:

animateWithDuration: Verzögerung: Optionen: Animation: abgeschlossen:

Fügen Sie "UIViewAnimationOptionAllowUserInteraction" zu Optionen hinzu, um Interaktion beim Scrollen zu ermöglichen.

Ich bin mir sicher, dass Sie immer noch das Lag-Problem haben werden. Hier ist der beste Weg, um es zu erklären. Bitte vergib mir im Voraus, da ich wahrscheinlich die falschen Begriffe benutze. Alle Animationen müssen auf dem Hauptthread ausgeführt werden. Wenn Sie eine Animation aufrufen, rockt iOS zuerst * P * und dann R *, bevor es * F * erzeugt. Es sieht so aus.

PPPPRRRRFFFFFFFFFFFFFFFFFF

Aber da ScrollViews nicht wissen, wie lange Ihre Animation dauern wird oder wann sie enden wird, muss sie die Animation so durchführen.

PRFPRFPRPRPRPRPRPRPRFPRFPRF

Meine Theorie ist, dass die Verzögerung, die Sie erleben, damit zu tun hat, dass diese beiden Aufrufe gleichzeitig im Hauptthread kollidieren. Ich bin nicht sicher, wie Sie dieses Problem lösen würden, außer mit einem schnelleren Chip. Ich könnte sagen, dass man eine Animation an die CPU und eine an die GPU schicken kann, aber ich bin noch nicht so weit fortgeschritten.

    
David Chu 29.04.2011 10:40
quelle
8

Ich würde vorschlagen, da die Opazität auf den Bewegungen des Fingers des Benutzers in UIScrollView basiert, mit der Delegate-Methode scrollViewDidScroll :. Die als Parameter übergebene scrollView kann verwendet werden, um den contentOffset zu überprüfen, der einfach ein CGPoint ist, der angibt, wie weit in die Inhaltsansicht der UIScrollView der Benutzer geblättert hat. So etwas kann verwendet werden, um die Bildlaufposition mit der Deckkraft einer bestimmten Ansicht in einem paginierten UIScrollView zu verknüpfen:

%Vor%     
Jacob 16.08.2011 15:26
quelle
0

Laut Informationen, die noch nicht veröffentlicht werden sollten, blockieren alle iOS 4.x-Versionen die Benutzerinteraktion während der Animation vollständig.

Ist es nicht interessant, dass Sie UITouches sind, die noch während der Animation registriert sind? Hmm ... vielleicht sagt das, dass etwas Neues in einer noch zu veröffentlichenden Version kommt!

Wenn Sie können, lesen Sie die iOS 5 Beta-Dokumentation zu UIView-Klassenmethoden.

    
mbm29414 01.08.2011 23:04
quelle

Tags und Links