Wewnątrz bloku animacji UIView znajduje się sposób na uzyskanie aktualnego czasu trwania animacji?Sprawdź czas trwania animacji bieżącego bloku animacji
[UIView animateWithDuration:1.0 animations:^{
// float duration = ?
}];
Wewnątrz bloku animacji UIView znajduje się sposób na uzyskanie aktualnego czasu trwania animacji?Sprawdź czas trwania animacji bieżącego bloku animacji
[UIView animateWithDuration:1.0 animations:^{
// float duration = ?
}];
Ponieważ używasz bloki, dlaczego nie tylko uchwycić zmienną z nim?
CGFloat duration = 1.0;
[UIView animateWithDuration:duration animations:^{
CGFloat theDuration = duration;
}];
Zgadzam się. Już upływający czas, dlaczego mielibyśmy znaleźć inny sposób na to. – Mrug
[CATransaction animationDuration]
jest to, czego szukasz
Niestety to nie działa, blok animacji UIView najwyraźniej nie działa bezpośrednio z CATransaction. –
można uzyskać bieżącej animacji dość łatwo. Na przykład, utworzenie CATransaction
:
CAAnimation *animation = [self.layer animationForKey:self.layer.animationKeys.firstObject];
[CATransaction begin];
[CATransaction setAnimationDuration:animation.duration];
[CATransaction setAnimationTimingFunction:animation.timingFunction];
// CALayer animation here
[CATransaction commit];
TL; DR: używać CALayer -actionForKey :, nie -animationForKey:
@Dimitri odpowiedź Bouniol „s nie działa na mnie, gdy wywołana z An An zaatakowany seter wewnątrz bloku animacji. Powodem, z mojego rozumienia, jest to, że system animacji UIView ustawia stan przed rozpoczęciem właściwej animacji (i ustawia sety przed rozpoczęciem właściwej animacji). To, co zadziałało, polegało na wywołaniu podobnej metody-actionForKey: na warstwie. Zwrócona akcja miała ustawiony odpowiedni czas i może być używana tak, jak jest w jego odpowiedzi.
CAAnimation *animation = (CAAnimation*)
[self.layer [email protected]"position"]; // or property of interest
[CATransaction begin];
[CATransaction setAnimationDuration:animation.duration];
[CATransaction setAnimationTimingFunction:animation.timingFunction];
// CALayer animation here
[CATransaction commit];
Nie jestem pewien, czy rozumiem, co masz na myśli, czy czas trwania animacji nie powinien wynosić 1,0? –
Tak, ale używam komponentu wewnątrz bloku, który musi znać czas trwania, i nie chcę podawać czasu trwania jako zmiennej – adamsiton
Dobre pytanie +1 przepraszam Nie mogłem pomóc. –