6

Ich habe eine CAEmitterLayer Animation entlang einer Bezier-Pfad (geschlossene Form, wie eine '8', von vier Kontrollpunkten) mit einer CAKeyframeAnimation. Jetzt möchte ich die Animation steuern, indem ich einen Touch-Finger entlang des Pfades (aber nicht unbedingt auf dem Pfad) schiebe. Wie ist das möglich und ist das überhaupt möglich?Wie steuert man CAKeyframeAnimation mit Touch-Geste?

+0

Sie meinen Partikel aus dem Bereich, wo der Benutzer seinen Finger schleppt? Was hast du auch versucht? –

+0

Ich bin sehr neu in objective-c und habe keine Ahnung, wie man eine Animation (sei es eine CAEmitterLayer oder eine UIImageView oder Ebene) entlang eines Pfades mit einer Fingerberührung führt. Ich wäre glücklich mit jedem kleinen Hinweis ... Ich habe versucht, ein Maskenbild zu verwenden, das ich über den Pfad gelegt habe, der mir sagte, dass der Finger an war oder neben dem Pfad, aber dann emittieren die Partikel auch neben dem Pfad. – headkit

+0

Warum ändern Sie nicht einfach die Position der Emitterschicht auf die Position des Fingers des Benutzers, indem Sie die Eigenschaft position festlegen? Holen Sie den Punkt, wo der Benutzer nicht schwer ist. –

Antwort

1

Machen Sie eine CGpoint click; Variable Ihren ersten „drag“ Punkt zu erinnern, dann erstellen Sie einen lokalen NSEvent Handler ...

[NSEvent addLocalMonitorForEventsMatchingMask: NSMouseMovedMask 
              | NSLeftMouseDownMask 
             handler:^(NSEvent *e) { 
    if (e.type == NSLeftMouseDown) click = e.locationInWindow; 
    else "yourDelta" = click - e.locationInWindow; // pseudoCode 
    return e; 
}]; 

„yourDelta“ ist der Versatz von diesem Ausgangspunkt aus dem aktuellen Standort ... Sie können auch ähnliche Ergebnisse mit Scroll-Ereignissen erzielen, indem Sie NSEventScrollWheelMask ... überwachen und die Werte e.deltaX und e.deltaY betrachten.

Edit: Ich bin nicht so vertraut mit Event-Handling auf iOS .. aber die gleiche Technik könnte mit normalen Event-Handler angewendet werden ... dh.

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent*)e { 
    click = [e locationInView:_yourView];  
} 
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent*)e { 
    "yourDelta" = click - [e locationInView:_yourView]; // pseudoCode 
} 

In Bezug auf Ihre Animation ist .. Eine Möglichkeit, „sucht“ einfach [layer addAnimation:theNewAnimation], Ihre vorherigen toValue ‚s, sondern die fromValue zu stützen‘ mit s von 0 oder Ihr Modell layer ... Verwendung Ihre layer.presentationLayer Werte stattdessen? Es ist schwer zu sagen, ohne den vollen Inhalt Ihrer CAKeyframeAnimation zu sehen.

+0

Dies wird mit 'cacao-touch' getaggt Ich nahm an, das OP suchte nach einer Möglichkeit, dies auf einem iOS-Gerät zu tun. Gibt es eine Möglichkeit, die CAKeyframeAnimation basierend auf dem Deltawert zu "suchen"? – Marc

Verwandte Themen