[英]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.