Я читал 12th number of Objc.io и столкнулся с проблемой при попытке первой части кода. В первой части «A Basic Animation» последняя часть кода использует byValue для интерполяции свойства с использованием начального значения свойства и добавления byValue.CABasicAnimation byValue странное поведение
Итак, я попробовал код в своем проекте и обнаружил, что он не работает и имел действительно странное поведение.
Вот очень короткий GIF, иллюстрирующий проблему:
И вот только код, я использую:
class ViewController: UIViewController {
var rocket1: UIView!
var rocket2: UIView!
override func viewDidLoad() {
super.viewDidLoad()
rocket1 = UIView(frame: CGRect(x: 20, y: 100, width: 50, height: 20))
rocket1.backgroundColor = UIColor.redColor()
rocket2 = UIView(frame: CGRect(x: 20, y: 150, width: 50, height: 20))
rocket2.backgroundColor = UIColor.blueColor()
self.view.addSubview(rocket1)
self.view.addSubview(rocket2)
}
@IBAction func button() {
let animation = CABasicAnimation(keyPath: "position.x")
animation.byValue = 300
animation.duration = 1
rocket1.layer.addAnimation(animation, forKey: "basic")
rocket1.layer.position.x += 300
animation.beginTime = CACurrentMediaTime() + 0.5
rocket2.layer.addAnimation(animation, forKey: "basic")
rocket2.layer.position.x += 300
}
}
Если вы хотите попробовать этот проект вот полный проект (использование симулятора iPhone или форм будет скрыто, потому что 5S слишком «короткое»): https://dl.dropboxusercontent.com/u/378166/VCoreAnimation.zip
Я не считаю это странным. Это довольно близко к поведению «аддитивных» анимаций, как [объяснено здесь] (http://ronnqvi.st/multiple-animations/) –
@ DavidRönnqvist Действительно интересно поблагодарить вас за ссылку на вашу статью! – Fantattitude