【问题标题】:Move and animate UIImageView using swift使用 swift 移动和动画 UIImageView
【发布时间】:2023-03-30 06:05:01
【问题描述】:

我这里有一个相当简单的问题。基本上,我正在尝试将对象(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

【问题讨论】:

    标签: uiimageview swift ios8 quartz-core


    【解决方案1】:

    使用NSValue(CGPoint: cgpiont) 代替NSValue.valueWithCGPoint(<#point: CGPoint#>),这在swift 中已被弃用。 NSValue(CGPoint: cgpiont) 是构造函数,用于将 CGPoint 转换为 NSValue 在swift中。以下代码将起作用

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

    【讨论】:

    • 嗯,太棒了,这很容易。好的,可以完美地转换它。你不会碰巧知道为什么我的图像一动不动吧?
    • var motion = CABasicAnimation(keyPath: "position") 这行得通!!我认为你应该指定“position”
    • 真棒!好的,非常感谢,我在这里学到了很多!如果可以的话,我会再给你一个赞成票,哈哈
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-04-21
      • 1970-01-01
      • 1970-01-01
      • 2022-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-09
      • 2013-01-08
      相关资源
      最近更新 更多