缩放和移动UIView的动画(swift) 我有一个UIVIEW,放在屏幕中间。当用户按下按钮时,我希望它在屏幕顶部附近向上移动,因为它缩小到大约五分之一的大小
我试过这个:缩放和移动UIView的动画(swift) 我有一个UIVIEW,放在屏幕中间。当用户按下按钮时,我希望它在屏幕顶部附近向上移动,因为它缩小到大约五分之一的大小,swift,animation,uiview,Swift,Animation,Uiview,我试过这个: UIView.animateWithDuration(0.7) { () -> Void in self.main.transform = CGAffineTransformMakeScale(0.2, 0.2) self.main.transform = CGAffineTransformMakeTranslation(0, -250) } 但出于某种原因,这只会扩展视图。我还尝试将其放入动画的持续时间中:
UIView.animateWithDuration(0.7) { () -> Void in
self.main.transform = CGAffineTransformMakeScale(0.2, 0.2)
self.main.transform = CGAffineTransformMakeTranslation(0, -250)
}
但出于某种原因,这只会扩展视图。我还尝试将其放入动画的持续时间中:
self.main.frame = CGRectMake(self.view.frame.width/2 - 10, 50, 50, 50)
如何使这两个动画都工作?您可以在Swift中以多种方式实现基本
UIView动画。下面的代码只是一个简单的方法
class ViewController: UIViewController {
@IBOutlet weak var animationButton: UIButton!
@IBOutlet weak var myView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
// I added seperate colour to UIView when animation move from one animation block to another.So, You can get better understanding how the sequence of animation works.
self.myView.backgroundColor = .red
}
@IBAction func animateButton(_ sender: UIButton) {
UIView.animate(withDuration: 0.5, delay: 0.0, options: UIViewAnimationOptions.curveEaseIn, animations: {
//Frame Option 1:
self.myView.frame = CGRect(x: self.myView.frame.origin.x, y: 20, width: self.myView.frame.width, height: self.myView.frame.height)
//Frame Option 2:
//self.myView.center = CGPoint(x: self.view.frame.width / 2, y: self.view.frame.height / 4)
self.myView.backgroundColor = .blue
},completion: { finish in
UIView.animate(withDuration: 1, delay: 0.25,options: UIViewAnimationOptions.curveEaseOut,animations: {
self.myView.backgroundColor = .orange
self.myView.transform = CGAffineTransform(scaleX: 0.25, y: 0.25)
self.animationButton.isEnabled = false // If you want to restrict the button not to repeat animation..You can enable by setting into true
},completion: nil)})
}
}
输出:
乔的回答与他的GIF描述的完全一样,但它并没有真正回答您的问题,因为它先转换然后缩放视图(与同时转换和缩放相反)。您的问题是在动画块中设置视图的变换,然后立即用另一个变换覆盖该值。要同时实现平移和缩放,您需要以下内容:
@IBAction func animateButton(_ sender: UIButton) {
let originalTransform = self.main.transform
let scaledTransform = originalTransform.scaledBy(x: 0.2, y: 0.2)
let scaledAndTranslatedTransform = scaledTransform.translatedBy(x: 0.0, y: -250.0)
UIView.animate(withDuration: 0.7, animations: {
self.main.transform = scaledAndTranslatedTransform
})
}
你好我已经这样做了,但是在做了这个之后,图像视图缩小了animation@Md.Sulayman这就是动画后收缩视图的全部思想。再读一遍这篇文章。让我知道你们想要实现什么?但我的图像纵横比在动画制作后丢失了,收缩不是问题,我想要那个too@Md.Sulayman这可能是另一个问题…检查您的约束条件?我的场景是,我在动画之前禁用了所有constarint,同时添加了缩放和平移。实际上,我同时需要这两个选项“let originalTransform=self.idImageView.transform let scaledTransform=originalTransform.scaledBy(x:WidthOfimimage/displayWidth,y:HeightOfimimage/displayHeight)let scaledTransform=scaledTransform.translatedBy(x:200,y:-1000)self.idImageView.transform=scaledAndTranslatedTransformormThanks为解决方案提供了帮助。但是,翻译会相对移动我的视图。我如何移动它以固定屏幕坐标,如x=100 y=100位置???。我意识到翻译后的视图会相对当前位置移动你的位置。@Md.Sulayman你需要计算y和y之间的差值我们的目的地x和y坐标以及UIView的坐标,然后将UIView的坐标转换为该数量。如果您想查看代码示例,请随时打开另一个问题并在此处链接我:)