CATransaction является немедленной и игнорирует время перехода - PullRequest
2 голосов
/ 19 ноября 2010

Я не могу понять, почему этот код:

CALayer *viewLayer = [aView layer];
[CATransaction begin];
[CATransaction setValue:[NSNumber numberWithFloat:10.0f]
                 forKey:kCATransactionAnimationDuration];
viewLayer.position = CGPointMake(200.0f, 200.0f);
viewLayer.position = CGPointMake(320.0f, 480.0f);

[CATransaction commit];

переместить вид, но движение не анимировано (движение немедленное). AView - это UIImageView внутри UIView.

1 Ответ

4 голосов
/ 20 ноября 2010

Неявные действия отключены для слоев, связанных с представлениями.Представление всегда является делегатом своего собственного слоя, и оно реализует -actionForKey: для отключения неявных анимаций и добавления только анимаций внутри блока анимации UIView.Лучше всего просто использовать явные CABasicAnimations.Предполагая, что вы хотите анимировать от этой первой точки до второй, вы можете использовать что-то вроде

CALayer *layer = aView.layer;

layer.position = CGPointMake(320, 480); // final position
CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"position"];
anim.fromValue = [NSValue valueWithCGPoint:CGPointMake(200, 200)];
anim.toValue = [NSValue valueWithCGPoint:layer.position]; // I believe this line is optional, it should default to current position
[layer addAnimation:anim forKey:@"position"];
...