奇怪的行为CGAffineTransform

时间:2017-04-18 11:39:22

标签: ios swift

我尝试为UILabel设置动画:

let label: UILabel = UILabel()
var transform = CGAffineTransform.identity

UIView.animate(withDuration: 2, animations: {
    self.transform = self.transform.translatedBy(x: 0, y: -150)
    self.transform = self.transform.scaledBy(x: 2, y: 2)
    self.label.transform = self.transform
})

效果很好。我有一个按钮,我添加了一个选择器,以便在按下时,标签再次动画:

func performSearch() {
    UIView.animate(withDuration: 2, animations: {
        self.transform = self.transform.translatedBy(x: 0, y: -300)
        self.label.transform = self.transform
    })
}

但它实际上做的是缩小标签的原始状态,将其向下移动到屏幕的底部,然后设置动画,尽管我希望它只是向上移动。为什么呢?

3 个答案:

答案 0 :(得分:0)

变换可能有点令人困惑......因为你已经缩放变换,进一步的变换似乎是"自动调整"通过缩放,但不是以一种非常直观或明显的方式。

这可以帮助您进一步:

transient

答案 1 :(得分:0)

如果你想在performSearch()中移动它,你需要使用正y值:

self.transform = self.transform.translatedBy(x: 0, y: 300)

答案 2 :(得分:0)

您可以将坐标系翻转为像iOS这样的行为......

layer.sublayerTransform = CATransform3DMakeScale(1.0f, -1.0f, 1.0f);