如何在Swift中移动对象的位置?

时间:2016-05-02 04:10:07

标签: ios swift uiview

我有一个对象,我正试图动画滚动屏幕。我不知道如何改变物体的位置并让它旋转得比现在多。这就是我到目前为止所做的:

@IBOutlet weak var quarterImage: UIImageView!

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    UIView.animateWithDuration(8.0, animations: {
        let angle = CGFloat(-4000)
        let rotate = CGAffineTransformMakeRotation(angle)
        self.quarterImage.transform = CGAffineTransformMakeRotation(angle)
    })

}

任何帮助都会很棒。谢谢!

2 个答案:

答案 0 :(得分:1)

我正在使用一些反复跳跃的笑脸图像的弹跳动画。 这是代码,以便您可以了解更改位置。 对于旋转,我猜你需要使用不同的角度PI值来进行平滑旋转。

    UIView.animateWithDuration(0.6, delay: 0.3, options: [UIViewAnimationOptions.Autoreverse, UIViewAnimationOptions.Repeat, UIViewAnimationOptions.CurveEaseOut], animations:
        {
            self.m_smileyImgView?.transform.ty -= 30;

        },completion: nil);

答案 1 :(得分:0)

CGAffineTransformMakeRotation可能有点棘手

首先,它需要以弧度为单位的度数

其次,超过2PI的值并不重要(0 = 2PI = 6PI = 10000PI)

以下是将图像旋转360度

的示例功能
func rotateImage(times times:Int) {
    if times == 0 { return }
    UIView.setAnimationCurve(.Linear)
    UIView.animateKeyframesWithDuration(1, delay: 0, options: .CalculationModeLinear, animations: {
        UIView.addKeyframeWithRelativeStartTime(0, relativeDuration: 1/3, animations: {
            self.imageView.transform = CGAffineTransformMakeRotation(CGFloat(M_PI * 2/3))
        })
        UIView.addKeyframeWithRelativeStartTime(1/3, relativeDuration: 1/3, animations: {
            self.imageView.transform = CGAffineTransformMakeRotation(CGFloat(M_PI * 4/3))
        })
        UIView.addKeyframeWithRelativeStartTime(2/3, relativeDuration: 1/3, animations: {
            self.imageView.transform = CGAffineTransformMakeRotation(CGFloat(M_PI * 2))
        })
    }) { (_) in
        self.rotateImage(times: times - 1)
    }
}

如果要在旋转时移动对象,可以通过添加此关键帧来更改其位置

UIView.addKeyframeWithRelativeStartTime(0, relativeDuration: 1.0, animations: { 
                self.imageView.center.x += 50
            })