2010-11-19 3 views
2

Я не могу понять, почему этот код:CATransaction немедленно и игнорировать время перехода

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.

ответ

4

Неявные действия отключены для слоев, связанных с представлениями. Представление всегда является делегатом своего уровня, и оно реализует -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"]; 
Смежные вопросы