#swift #xcode #animation
#swift #xcode #Анимация
Вопрос:
Я пытаюсь анимировать UIView вдоль овала, используя кривую Безье. Код работает, за исключением того, что между каждым циклом анимации есть задержка. Я в недоумении относительно того, что является причиной этого.
let myView = UIView()
myView.backgroundColor = UIColor.blue
myView.frame = CGRect(x: 0, y:0, width: 30, height: 30)
let path = UIBezierPath(ovalIn: CGRect(x: 0, y: 0, width: 200, height: 200))
let animation = CAKeyframeAnimation(keyPath: "position")
animation.path = path.cgPath
animation.repeatCount = 1000
animation.duration = 1
myView.layer.add(animation, forKey: "animate along path")
Ответ №1:
Найдено решение. Пауза между циклами анимации происходит только при создании пути с помощью конструктора UIBezierPath(ovalIn:). При создании собственного пути вручную задержки нет. Итак, я сделал свой собственный овал.
Заменил это
let path = UIBezierPath(ovalIn: CGRect(x: 0, y: 0, width: 200, height: 200))
с помощью этого
let rect = CGRect(x: 0, y: 0, width: 200, height: 200)
let path = UIBezierPath()
path.move(to: CGPoint(x: rect.maxX, y: rect.midY))
path.addQuadCurve(to: CGPoint(x: rect.midX, y: rect.maxY), controlPoint: CGPoint(x: rect.maxX, y: rect.maxY))
path.addQuadCurve(to: CGPoint(x: rect.minX, y: rect.midY), controlPoint: CGPoint(x: rect.minX, y: rect.maxY))
path.addQuadCurve(to: CGPoint(x: rect.midX, y: rect.minY), controlPoint: CGPoint(x: rect.minX, y: rect.minY))
path.addQuadCurve(to: CGPoint(x: rect.maxX, y: rect.midY), controlPoint: CGPoint(x: rect.maxX, y: rect.minY))