在CGAffineTransformScale导致"跳跃"之后动画CGAffineTransformTranslate帧

时间:2014-12-28 10:48:17

标签: ios swift uiview uiviewanimation cgaffinetransform

考虑一个简单的Xcode 6 Swift“单视图”项目。 AutoLayout已停用。

视图(所有自动调整功能已停用)包含一个100x100 UIImageView(图像)和两个按钮“Move”和“Resize”,触发ViewController中的相应功能:

//
//  ViewController.swift
//

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var image: UIImageView!

    @IBAction func resize(sender: UIButton) {
        UIView.animateWithDuration(1.0) {
            self.image.transform = CGAffineTransformScale(self.image.transform, 2, 2)
        }
    }

    @IBAction func move(sender: AnyObject) {
        UIView.animateWithDuration(1.0) {
            self.image.transform = CGAffineTransformTranslate(self.image.transform, 10, 0);
        }
    }
}

按钮移动会将图像向右移动10个点。按钮调整大小应在每个维度中将图像缩放2。每个转换应设置动画,持续时间为1秒。

每个按钮本身都能很好地工作。 只要按顺序点击按钮,就会出现问题,例如首先移动(我等待动画完成)和然后 调整大小(或其他方式)。在这种情况下,第二个动画不会发生在它应该的位置。相反,图像首先将几个点“跳”到错误的方向,然后将预期的动画恢复到(正确的)新位置。

我的目的是在彼此之后单独触发多个动画过渡,因此这种“跳跃”效果是一个主要的烦恼。非常感谢有关如何解决问题的任何想法。如果我能提供更多详细信息,请通知我。

修改:请允许我再次突出显示所有自动布局和自动调整已停用,因此不应导致此问题。

1 个答案:

答案 0 :(得分:1)

不使用CGAffineTransformScale,而是更改框架以达到相同的效果。

移动视图:

UIView.animateWithDuration(1.0, delay: 0, options: UIViewAnimationOptions.BeginFromCurrentState, animations: { () -> Void in
        self.theView.transform = CGAffineTransformTranslate(self.theView.transform, 0, 20)
        }, completion:nil)

缩放视图:

UIView.animateWithDuration(1.0) {
        self.theView.frame = CGRectInset(self.theView.frame, 0.05 * self.theView.frame.width, 0.05 * self.theView.frame.height)
    }