Базовая анимация не работает со значением «альфа» - PullRequest
34 голосов
/ 23 сентября 2011

Перед этим кодом альфа-версия моего фильма установлена ​​на 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 не может выполнить такую ​​простую задачу, как эта?

Ответы [ 3 ]

97 голосов
/ 23 сентября 2011
[CABasicAnimation animationWithKeyPath:@"opacity"];

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

1 голос
/ 19 ноября 2018

Для Свифта:

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
    }
}
1 голос
/ 28 октября 2015

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

...