CALayer явно не работает анимации - PullRequest
3 голосов
/ 27 августа 2009

Неявно все ведет себя хорошо. Но когда я пытаюсь использовать явные анимации для создания нескольких анимаций на одном слое (например, непрозрачность и перевод), я получаю странные результаты.

Прежде всего, я попытался использовать CATransaction. Затем я переключился на CAAnimationGroup. Кажется, оба не получают то, что я хочу.

Что я хочу? Все, что я хочу, это чтобы слой перемещался из одной точки в другую с начальной непрозрачностью и целевой непрозрачностью. вот и все!

Что я вижу? Вот один из примеров ...

При выполнении транзакции начать / зафиксировать перевод выглядит правильно, но непрозрачность - нет. Моя начальная непрозрачность равна 0, а целевая непрозрачность равна 0,5. Однако, когда я запускаю анимацию, она смешивается до 0,5, но затем «привязывается» к 1,0 (полностью непрозрачно).

Я попытался установить для удаленного завершения значение НЕТ. но это тоже не помогло. Я думаю, суть в том, что мне нужно знать разницу между AnimationGroup и транзакцией.

Кто-нибудь может объяснить это, и, возможно, что я вижу относительно странности моих анимаций?

Спасибо!

Ответы [ 2 ]

1 голос
/ 28 августа 2009

Хорошо, явные анимации не работают для меня. Я попытался создать базовую анимацию для непрозрачности (слоя). Я поместил это в анимационную группу. Когда я выполняю, ничего не происходит. Для простоты я взял перевод анимации. Это только попытка сделать анимацию непрозрачности.

CAAnimationGroup *group = [CAAnimationGroup animation];

CABasicAnimation *opacityAnimation;     
opacityAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"];  
opacityAnimation.fromValue = [NSNumber numberWithDouble:fromalpha];     
opacityAnimation.toValue = [NSNumber numberWithDouble:toalpha];     
opacityAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
opacityAnimation.delegate = self;
opacityAnimation.duration = 2.7;        

opacityAnimation.removedOnCompletion = NO;

group.animations = [NSArray arrayWithObjects: opacityAnimation, nil];
[baseLayer addAnimation:group forKey:@"groupAnim"];
0 голосов
/ 30 марта 2012

Вы должны установить непрозрачность слоев равной значению после анимации в явных анимациях.

layer.opacity=0.0f;
...