考虑一个简单的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秒。
每个按钮本身都能很好地工作。 只要按顺序点击按钮,就会出现问题,例如首先移动(我等待动画完成)和然后 调整大小(或其他方式)。在这种情况下,第二个动画不会发生在它应该的位置。相反,图像首先将几个点“跳”到错误的方向,然后将预期的动画恢复到(正确的)新位置。
我的目的是在彼此之后单独触发多个动画过渡,因此这种“跳跃”效果是一个主要的烦恼。非常感谢有关如何解决问题的任何想法。如果我能提供更多详细信息,请通知我。
修改:请允许我再次突出显示所有自动布局和自动调整已停用,因此不应导致此问题。
答案 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)
}