2009-08-27 2 views
3

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

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

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

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

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

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

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

Спасибо!

+0

Вы должны иметь возможность анимировать эти свойства неявно, установив значение альфа-значения и положение слоя. Похоже, ты на правильном пути. Сложите их вместе в CATransaction begin/commit, и они будут анимироваться атомарно. Отправьте свой код, если он не работает должным образом. –

+0

Работа с неявными анимациями, но идентификатор, как и их явное создание, может обрабатывать завершенное событие, когда анимация завершается. – AlvinfromDiaspar

ответ

1

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

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

Попытайтесь это добавить: opacityAnimation.fillMode = kCAFillModeForwards; Кроме того, если вы выберете свой код и щелкните виджет кода на панели инструментов, он будет правильно отформатировать. –

0

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

layer.opacity=0.0f; 
Смежные вопросы