Я пытаюсь повернуть UIView на 90 градусов по овальной траектории Безье.Я могу анимировать вид по безьеру, используя жест смахивания в качестве триггера.Проблема:
Вид размещается в центре верхней части экрана, но анимация начинается в точке 90 градусов (по часовой стрелке), выполняет все 360 градусов и затем возвращает вид в центр.Топ.Я хочу, чтобы это началось с центральной точки зрения.
Я только хочу, чтобы представление перемещалось на 1/4 пути вокруг круга при каждой анимации.Таким образом, если он начинается при 0 градусах и перемещается до 90 при первом пролистывании, то при втором пролистывании он начинается с 90 и перемещается до 180 и так далее.
Вот мой код:
C_SelectionWrapper - пользовательский UIView:
@IBDesignable class C_SelectionWrapper: UIView {
var myOvalPath:UIBezierPath?
override func draw(_ rect: CGRect) {
myOvalPath = UIBezierPath(ovalIn: CGRect(x: 0, y: 0, width: rect.size.width, height: rect.size.width))
UIColor.gray.setStroke()
myOvalPath!.lineWidth = 5.0
//add the dashes
var dashes: [CGFloat] = [5, 25, 5, 25]
myOvalPath!.setLineDash(&dashes, count: dashes.count, phase: 0)
//voila!
myOvalPath!.stroke()
}
}
в моем ViewController:
@IBOutlet weak var vSelectionWrapper: C_SelectionWrapper!
...
override func viewDidLoad() {
super.viewDidLoad()
...
//add a swipe gesture
let downSwipe = UISwipeGestureRecognizer(target: self, action: #selector(rotateButtons(_:)))
downSwipe.direction = .down
self.view.addGestureRecognizer(downSwipe)
}
@objc func rotateButtons(_ mySwipe:UISwipeGestureRecognizer) {
if let thisPath = vSelectionWrapper.myOvalPath {
let kfAnimation = CAKeyframeAnimation(keyPath: "position")
kfAnimation.path = thisPath.cgPath
kfAnimation.rotationMode = CAAnimationRotationMode.rotateAuto
kfAnimation.repeatCount = 0
kfAnimation.duration = 2.5
blueOval!.layer.add(kfAnimation, forKey: "animation")
}
}
Вот оно в действии:
https://youtu.be/9F44tShWJ88
Любая помощь будет оценена.