使用swift移动和动画UIImageView

时间:2014-07-17 21:51:43

标签: uiimageview swift ios8 quartz-core

我在这里有一个相当简单的问题。基本上我试图将一个对象(一个UIImageView)从A点(它在故事板中设置)移动到我以编程方式定义的B点。

我的第一次传递导致此代码

        UIView.animateWithDuration(0.75, delay: 0.5, options: UIViewAnimationOptions.CurveLinear, animations: {
            self.signInButton.alpha = 1
            self.signInButton.center.y = 10
        }, completion: nil)

然而,这段代码的作用是将按钮偏离中心,然后再回到原来的位置。

然后我调查了QuartzCore来帮助我,但一切都在Objective-C中。我有这个方法:

    func moveImage(view: UIImageView){
        var toPoint: CGPoint = CGPointMake(0.0, -10.0)
        var fromPoint : CGPoint = CGPointZero

        var movement = CABasicAnimation(keyPath: "movement")
        movement.additive = true
        movement.fromValue = fromPoint
        movement.toValue = toPoint
        movement.duration = 0.3

        view.layer.addAnimation(movement, forKey: "move")
    }

但问题是movement.fromValue无法接受CGPoint。我知道在目标C中有一个函数将CGPoint转换为NSValue,但是这个函数似乎已经被Swift弃用了,我无法找到另一种方法。

因此,我的问题是,我如何将CGPoint转换为NSValue以使我的moveImage()功能正常工作,或者是否有更好的方法可以移动对象A到B点?

谢谢!

我正在看这个问题Animate UIImage in UIImageView Up & Down (Like it's hovering) Loop

2 个答案:

答案 0 :(得分:12)

使用NSValue(CGPoint: cgpiont)代替NSValue.valueWithCGPoint(<#point: CGPoint#>),而不是在swift中弃用的NSValue(CGPoint: cgpiont)CGPoint是给定的构造函数,可用于将NSValue转换为func moveImage(view: UIImageView){ var toPoint: CGPoint = CGPointMake(0.0, -10.0) var fromPoint : CGPoint = CGPointZero var movement = CABasicAnimation(keyPath: "movement") movement.additive = true movement.fromValue = NSValue(CGPoint: fromPoint) movement.toValue = NSValue(CGPoint: toPoint) movement.duration = 0.3 view.layer.addAnimation(movement, forKey: "move") } 在swift.Following代码将工作

{{1}}

答案 1 :(得分:3)

SWIFT 3更新

 func moveImageView(imgView: UIImageView){
        var toPoint:CGPoint = CGPoint(x: 0.0, y: -10.0)
        var fromPoint:CGPoint = CGPoint.zero
        var movement = CABasicAnimation(keyPath: "movement")
        movement.isAdditive = true
        movement.fromValue = NSValue(cgPoint: fromPoint)
        movement.toValue = NSValue(cgPoint: toPoint)
        movement.duration = 0.3
        imgView.layer.add(movement, forKey: "move")
    }