使用Swift移动和动画UIImageView

4

我有一个看起来应该很简单的问题。基本上,我试图将一个对象(一个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。我知道在Objective C中有一个函数可以将CGPoint转换为NSValue,但是这个函数似乎已经过时了,在Swift中找不到其他方法来解决这个问题。
因此,我的问题要么是,如何将CGPoint转换为NSValue使我的moveImage()函数工作,要么是有更好的方法将对象从A点移动到B点?
谢谢!
我正在查看这个问题Animate UIImage in UIImageView Up & Down (Like it's hovering) Loop
2个回答

12

使用 NSValue(CGPoint: cgpiont) 代替在 swift 中已经弃用的 NSValue.valueWithCGPoint(<#point: CGPoint#>)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")
}

哇,太棒了,这很容易。好的,它完美地转换了。你不会知道为什么我的图像还是不动吧? - Pompey
4
变量movement是一个基本动画(CABasicAnimation)对象,它作用于"position"这个属性。这行代码有效!我认为你应该明确指定"position"。 - codester
太好了,它完全可以!好的,非常感谢,我在这里学到了很多!如果可以的话,我会再给你一个赞哈哈。 - Pompey

5

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")
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接