Анимировать по определенному пути слоя в быстрой

введите описание изображения здесь Я довольно новичок в iOS, у меня небольшая проблема с CAKeyframeAnimation, я хочу анимировать представление по определенному пути другого слоя представления. это уже успешно оживляет. Тем не менее, положение анимации не то, что я ожидал.

Как вы можете видеть в моем коде. Я создаю UIView(myView) с круглыми границами. Я хочу, чтобы другой вид (квадрат) следовал за орбитой границ myView. Я уже установил центр myView на середину экрана. затем я пытаюсь получить CGPath myView и установить его в путь CAKeyframeAnimation. Однако квадрат вращается где-то еще, а не на границах myView. Кто-нибудь может мне помочь? Спасибо

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)    
    let square = UIView()
    square.frame = CGRect(x: 0, y: 0, width: 20, height: 20)
    square.backgroundColor = UIColor.redColor()
    self.view.addSubview(square)
    let bounds = CGRect(x: 0, y: 0, width: 200, height: 200)
    let myView = UIView(frame: bounds)
    myView.center = self.view.center
    myView.layer.cornerRadius = bounds.width/2
    myView.layer.borderWidth = 10
    myView.layer.borderColor = UIColor.brownColor().CGColor
    self.view.addSubview(myView)       
    var orbit = CAKeyframeAnimation(keyPath: "position")
    orbit.path = CGPathCreateWithEllipseInRect(myView.layer.bounds, nil)
    orbit.rotationMode = kCAAnimationRotateAuto
    orbit.repeatCount = Float.infinity
    orbit.duration = 5.0
    square.layer.addAnimation(orbit, forKey: "orbit")
}

2 ответа

Решение

frame "описывает местоположение и размер представления в системе координат его суперпредставления", тогда как bounds msgstr "описывает расположение и размер представления в его собственной системе координат."

Так что, если вы строите путь из bounds, затем square должно быть подвидом myView, Если вы построили путь, используя frame из myView, затем square может быть подвидом view,

Итак, я нахожу другое решение вместо создания CGPath основываясь на какой-то точке зрения, я использовал

let myPath = UIBezierPath(arcCenter: myView.center, radius: bounds.width/2, startAngle: CGFloat(-(CGFloat(M_PI_2))), endAngle: CGFloat((2.0 * M_PI - M_PI_2)), clockwise: true).CGPath

таким образом, я могу указать центральную точку UIBezierPath,

Другие вопросы по тегам