6

Mam CAEmitterLayer animowane wzdłuż ścieżki Beziera (forma zamknięta, jak "8", z czterech punktów kontrolnych) z CAKeyframeAnimation. Teraz chcę kontrolować animację przesuwając palcem wzdłuż (ale nie koniecznie) ścieżki. Jak to możliwe i czy jest to możliwe?Jak kontrolować CAKeyframeAnimation za pomocą gestu dotykowego?

+0

Masz na myśli emisję cząstek z miejsca, w którym użytkownik przeciąga palec? Co próbujesz? –

+0

Jestem bardzo nowy w celu-c i nie mam pojęcia, jak prowadzić animację (niech to będzie CAEmitterLayer lub UIImageView lub warstwa) wzdłuż ścieżki z ruchem palca. Byłbym szczęśliwy z każdej małej podpowiedzi ... Próbowałem użyć obrazu maski, który leżałem na ścieżce, która mówiła mi, że palec był na lub obok ścieżki, ale cząsteczki również emitują poza ścieżką. – headkit

+0

Dlaczego po prostu nie zmienić pozycji f warstwy emitera na pozycję palca użytkownika, ustawiając właściwość position? Uzyskanie punktu, w którym użytkownik nie jest trudny. –

Odpowiedz

1

Zrób zmienna CGpoint click; pamiętać początkowego oporu „punkt”, a następnie utworzyć lokalną NSEvent obsługi ...

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

„yourDelta” oznacza przesunięcie tego punktu początkowego od aktualnej lokalizacji ... można również osiągnąć podobne wyniki w przypadku zdarzeń przewijania, monitorując NSEventScrollWheelMask ... i patrząc na wartości e.deltaX i e.deltaY.

Edycja: Nie jestem zaznajomiony z obsługą zdarzeń na iOS .., ale ta sama technika może być stosowana z normalnymi procedurami obsługi zdarzeń ... tj.

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

Co do „poszukiwania” animacja .. Jednym z możliwych sposobów jest po prostu [layer addAnimation:theNewAnimation], wykorzystując swoje wcześniejsze toValue „s, ale zamiast oparcie fromValue” s 0, czy Twój model layer ... użytku zamiast tego wartości layer.presentationLayer? Trudno powiedzieć, nie widząc pełnej zawartości twojego CAKeyframeAnimation.

+0

To oznaczono jako "kakao-touch". Założono, że OP szukał sposobu, aby to zrobić na urządzeniu z systemem iOS. Czy istnieje sposób "wyszukiwania" CAKeyframeAnimation na podstawie wartości delta? – Marc

Powiązane problemy