Базовая анимация не работает с альфа-значением

Перед этим кодом альфа-канал моего фильма установлен на 0,

CABasicAnimation* fadein= [CABasicAnimation animationWithKeyPath:@"alpha"];
    [fadein setToValue:[NSNumber numberWithFloat:1.0]];
    [fadein setDuration:0.5];
    [[moviepic layer]addAnimation:fadein forKey:@"alpha"];

Ничего не произошло, если я заранее установил альфа на 0,5, альфа останется на 0,5 и не будет анимирована на 1.

Я видел код, использующий UIView beginAnimations:, но я обучаю основной анимации, поэтому мне стало интересно, почему CABasicAnimation не может выполнять такую ​​простую задачу?


person 5argon    schedule 23.09.2011    source источник


Ответы (3)


[CABasicAnimation animationWithKeyPath:@"opacity"];

UIView представляет это как alpha, а CALayer представляет это как opacity.

person ohho    schedule 23.09.2011
comment
Что О_о Скоро попробую. Но есть ли еще такие случаи? И где я могу проверить, что я могу использовать для KeyPath? (обычно я проверяю свойство объекта, в котором есть setAlpha, но в этом случае оно не совпадает ...) - person 5argon; 23.09.2011
comment
@Sargon С помощью Core Animation вы анимируете свойства CALayer, а не свойства UIView, поэтому слой - это то место, где нужно искать правильные имена свойств - см .: view.layer. - person Palimondo; 27.09.2011

Для Swift:

let opacity = CABasicAnimation(keyPath: "opacity")
opacity.fromValue = fromValue
opacity.toValue = toValue
opacity.duration = duration
opacity.beginTime = CACurrentMediaTime() + beginTime  //If a delay is needed

view.layer.add(opacity, forKey: nil)

Если вы хотите сохранить окончательное значение alpha, вы должны установить текущий контроллер представления в качестве делегата анимации непрозрачности:

opacity.delegate = self

И в функции делегата animationDidStop вы должны сделать:

extension ViewController: CAAnimationDelegate {

    func animationDidStop(_ anim: CAAnimation, finished flag: Bool) {   
        view.alpha = toValue
    }
}
person Ginés SM    schedule 19.11.2018

@ohho отвечает на заданный вопрос. Мой будет немного более общим. Список того, что и как можно анимировать с помощью CABasicAnimation, см. В документация Apple

person Julian    schedule 28.10.2015