Swift 使用CGAffineTransform缩放链接UIView动画&;翻译
我正在尝试使用在操场上设置UIView动画。目标是向下移动视图,然后将其向右移动,同时将其放大 所以我分两步来做,第一步完成后调用第二个动画 下面是我将应用于我的视图的3个转换Swift 使用CGAffineTransform缩放链接UIView动画&;翻译,swift,uiview,cgaffinetransform,Swift,Uiview,Cgaffinetransform,我正在尝试使用在操场上设置UIView动画。目标是向下移动视图,然后将其向右移动,同时将其放大 所以我分两步来做,第一步完成后调用第二个动画 下面是我将应用于我的视图的3个转换 let scaleUp = CGAffineTransform(scaleX: 2, y: 2) let moveDown = CGAffineTransform(translationX: 0, y: 100) let moveRight = CGAffineTransform(translationX: 100, y
let scaleUp = CGAffineTransform(scaleX: 2, y: 2)
let moveDown = CGAffineTransform(translationX: 0, y: 100)
let moveRight = CGAffineTransform(translationX: 100, y: 0)
要执行moveDown
然后执行moveRight
操作,我将第二个连接到第一个
UIView.animate(withDuration: 2, animations: {
circleView.transform = moveDown
}) { _ in
//First animation completed
UIView.animate(withDuration: 4, animations: {
circleView.transform = moveDown.concatenating(moveRight)
})
}
`
现在,当我尝试在向右移动时向上缩放视图时,它似乎正在对已变换的视图应用缩放,这导致在第二个动画开始之前将所有内容向下移动(2次)
UIView.animate(withDuration: 2, animations: {
circleView.transform = moveDown
}) { _ in
//First animation completed
UIView.animate(withDuration: 2, animations: {
circleView.transform = moveDown.concatenating(scaleUp.concatenating(moveRight))
})
}
如何在不重置初始转换的情况下实现向右移动+放大?在应用转换的顺序中,我认为是因为您在转换之前应用了缩放,它采用的是放大值
moveRight.concatenating(scaleUp)
可能行。我想你的问题已经解决了。据说,为了实现您的目标(两个同步动画),您需要使用caanimation和layer addAnimation 我试过这个,效果很好
let scaleAA = CABasicAnimation(keyPath: "transform.scale")
scaleAA.fromValue = 1
scaleAA.byValue = 2
scaleAA.duration = 1
scaleAA.timingFunction = CAMediaTimingFunction.init(name: .easeOut)
let scaleXX = CABasicAnimation(keyPath: "position.x")
scaleXX.fromValue = 0
scaleXX.byValue = 20
scaleXX.duration = 1
scaleXX.timingFunction = CAMediaTimingFunction.init(name: .easeOut)
UIView.animate(withDuration: 1, animations: {
v1.transform = moveDown
}) { _ in
//First animation completed
v1.layer.add(scaleAA, forKey: "scale")
v1.layer.add(scaleXX, forKey: "xxxx")
}
我的解决方案更像是热修复程序,但它正是您想要的:
1
执行下移变换的动画
2
还原上述变换(无动画)
3
将circleView
设置为下移变换后的位置(无动画)
4
执行向右移动和放大的动画
UIView.animate(withDuration: 2, animations: {
circleView.transform = moveDown //1
}) { _ in
//First animation completed
circleView.transform = .identity //2
circleView.frame.origin.y += 100 //3
UIView.animate(withDuration: 2, animations: {
circleView.transform = moveRight.concatenating(scaleUp) //4
})
}
我也试过了,它向右移动2倍,同时在平移前向下推谢谢,这很有效。不想麻烦链接多个Cabasicanization