[英]How do I increase or decrease the size of a button in Swift?
我的应用程序中有一个UIButton
,称为“ buttonPlay”。 我正在使用自动布局,但是按钮没有附加任何NSLayoutConstraints
。
我想编写一个动画来增加和减少按钮的高度和宽度 。 动画代码如下所示:
// "Repeat" because the animation must repeat itself
UIView.animateWithDuration(1.0, delay: 0.6, options: UIViewAnimationOptions.Repeat, animations: {
// Animation code goes here
// nil: the animation is not supposed to end
}, completion: nil)
}
为了获得x位置,y位置,宽度和高度的原始值,我正在使用以下代码:
var frmPlay : CGRect = self.buttonPlay.frame
// get the current x and y positions
let originXbutton = frmPlay.origin.x
let originYbutton = frmPlay.origin.y
// get the current width and height of the button
let originWidthbutton = frmPlay.size.width
let originHeightbutton = frmPlay.size.height
// set the frame (frmPlay) to the button frame
self.buttonPlay.frame = frmPlay
好的,现在该增加或减少动画的宽度和高度了。 我将这段代码放在animation
块中:
self.buttonPlay.frame = CGRectMake(
originXbutton,
originYbutton,
originWidthbutton-100,
originHeightbutton)
self.buttonPlay.frame = CGRectMake(
originXbutton,
originYbutton,
originWidthbutton+100,
originHeightbutton)
动画代码如下所示:
UIView.animateWithDuration(1.0, delay: 0.6, options: UIViewAnimationOptions.Repeat, animations: {
println("Animation function animateStuff() started!")
var frmPlay : CGRect = self.buttonPlay.frame
let originXbutton = frmPlay.origin.x
let originYbutton = frmPlay.origin.y
let originWidthbutton = frmPlay.size.width
let originHeightbutton = frmPlay.size.height
self.buttonPlay.frame = frmPlay
self.buttonPlay.frame = CGRectMake(
originXbutton,
originYbutton,
originWidthbutton-100,
originHeightbutton)
self.buttonPlay.frame = CGRectMake(
originXbutton,
originYbutton,
originWidthbutton+100,
originHeightbutton)
}, completion: nil)
让我们运行该应用程序。 哦哦! 按钮(也称为buttonPlay) 不会以任何方式变大或变小 。 虽然它从右向左移动。 但是,嘿! 我还没有碰过x和y位置代码。
是什么原因造成的?
一起使用UIViewAnimationOptions.Repeat
和UIViewAnimationOptions.Autoreverse
可以做到这一点。 您只需要在动画块内设置一帧更改即可。 动画块中同一属性的状态更改不能超过一个。
UIView.animateWithDuration(1.0, delay: 0.6, options:
UIViewAnimationOptions.Repeat | UIViewAnimationOptions.Autoreverse | UIViewAnimationOptions.AllowUserInteraction, animations: {
println("Animation function animateStuff() started!")
var frmPlay : CGRect = self.buttonPlay.frame
let originXbutton = frmPlay.origin.x
let originYbutton = frmPlay.origin.y
let originWidthbutton = frmPlay.size.width
let originHeightbutton = frmPlay.size.height
self.buttonPlay.frame = frmPlay
self.buttonPlay.frame = CGRectMake(
originXbutton,
originYbutton,
originWidthbutton+100,
originHeightbutton)
}, completion: { finished in
})
UIViewAnimationOptionRepeat:无限重复动画。
UIViewAnimationOptionAutoreverse:向后和向前运行动画。 必须与UIViewAnimationOptionRepeat选项结合使用。
如果您想上下缩放按钮,
UIView.animateWithDuration(1.0, delay: 0.6, options:
UIViewAnimationOptions.Repeat | UIViewAnimationOptions.Autoreverse | UIViewAnimationOptions.AllowUserInteraction, animations: {
self.buttonPlay.transform = CGAffineTransformMakeScale(1.5, 1.5)
}, completion: { finished in
})
放置单独的动画以增加和减小按钮的大小。尝试以下代码。
这将减小带有动画的按钮的大小。
UIView.animateWithDuration(1.0, delay: 0.6, options: UIViewAnimationOptions.Repeat, animations: {
println("Animation function animateStuff() started!")
var frmPlay : CGRect = self.buttonPlay.frame
let originXbutton = frmPlay.origin.x
let originYbutton = frmPlay.origin.y
let originWidthbutton = frmPlay.size.width
let originHeightbutton = frmPlay.size.height
self.buttonPlay.frame = frmPlay
self.buttonPlay.frame = CGRectMake(
originXbutton,
originYbutton,
originWidthbutton-100,
originHeightbutton)
}, completion: nil)
这将再次增加原始按钮的大小。
UIView.animateWithDuration(1.0, delay: 0.6, options: UIViewAnimationOptions.Repeat, animations: {
println("Animation function animateStuff() started!")
var frmPlay : CGRect = self.buttonPlay.frame
let originXbutton = frmPlay.origin.x
let originYbutton = frmPlay.origin.y
let originWidthbutton = frmPlay.size.width
let originHeightbutton = frmPlay.size.height
self.buttonPlay.frame = frmPlay
self.buttonPlay.frame = CGRectMake(
originXbutton,
originYbutton,
originWidthbutton+100,
originHeightbutton)
}, completion: nil)
我在Swift 3
解决方案:
func animate(sender: UIButton) {
let buttonSize: CGRect = sender.frame
let originXbutton = buttonSize.origin.x
let originYbutton = buttonSize.origin.y
let originWidthbutton = buttonSize.size.width
let originHeightbutton = buttonSize.size.height
UIView.animate(withDuration: 0.2, animations: {
sender.frame = CGRect(x: originXbutton, y: originYbutton - 5, width: originWidthbutton + 3, height: originHeightbutton + 3)
}, completion: { finished in
sender.frame = CGRect(x: originXbutton, y: originYbutton, width: originWidthbutton, height: originHeightbutton)
})
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.