2016-02-17 44 views
2

我試圖在此函數中使用CAKeyframeAnimation沿着UIBezierPath移動UIImageView。目前它根本不動。我知道路徑創建是正確的,因爲我正在繪製它來檢查它,並且它是我想要的形狀中的一個很好的弧。使用CAKeyframeAnimation沿UIBezierPath移動UIImageView不會執行任何操作

代碼:

func animateSun() { 
    let sunImageView = UIImageView(image: UIImage(named: "Sun")) 
    sunImageView.sizeToFit() 

    let sunAnimationPath = UIBezierPath() 
    let pathStart = CGPoint(x: (sunImageView.frame.width/2), y: self.view.frame.height - (self.rearMountainView.frame.height/2) + sunImageView.frame.height) 
    let pathEnd = CGPoint(x: self.view.frame.width - (sunImageView.frame.width/2), y: self.view.frame.height - (self.rearMountainView.frame.height/2) + (sunImageView.frame.height)) 

    sunAnimationPath.moveToPoint(pathStart) 

    let controlOne = CGPoint(x: pathStart.x, y: pathStart.y - 500) 
    let controlTwo = CGPoint(x: pathEnd.x, y: pathEnd.y - 500) 

    sunAnimationPath.addCurveToPoint(pathEnd, controlPoint1: controlOne, controlPoint2: controlTwo) 

    sunImageView.frame = CGRectMake(pathStart.x - (sunImageView.frame.width/2), pathStart.y - (sunImageView.frame.height/2), sunImageView.frame.width, sunImageView.frame.height) 

    let animation = CAKeyframeAnimation(keyPath: "day") 
    animation.duration = 15 
    animation.repeatCount = 0 
    animation.path = sunAnimationPath.CGPath 
    animation.calculationMode = kCAAnimationPaced 
    animation.fillMode = kCAFillModeForwards 
    animation.removedOnCompletion = false 

    sunImageView.layer.addAnimation(animation, forKey: "day") 
    self.view.addSubview(sunImageView) 
    //self.view.sendSubviewToBack(sunImageView) 

    let layer   = CAShapeLayer() 
    layer.path   = sunAnimationPath.CGPath 
    layer.strokeColor = UIColor.blackColor().CGColor 
    layer.lineWidth  = 1.0 
    layer.fillColor  = nil 

    self.view.layer.addSublayer(layer) 
} 

回答

3

你如何創建你的動畫是錯誤的方式,關鍵應該是平等的position,因爲你要動畫position屬性,而不是day屬性。另外,例如,它可以是position.xposition.y,這些是可動畫的屬性。更改「日」鍵,「位置」和動畫將工作:

let animation = CAKeyframeAnimation(keyPath: "position") 


從文檔中關於CAKeyframeAnimation

創建並返回一個CAPropertyAnimation實例指定 關鍵路徑。一個CAPropertyAnimation的新實例,其關鍵路徑設置爲 keyPath。
參數:keyPath - 要動畫的屬性的鍵路徑。

相關問題