Swift:如何通过按住按钮来逐步调整 UIView 的大小
Posted
技术标签:
【中文标题】Swift:如何通过按住按钮来逐步调整 UIView 的大小【英文标题】:Swift: how to incrementally re-size a UIView by keeping a button pressed 【发布时间】:2016-03-04 13:27:56 【问题描述】:在我的应用程序中,用户需要根据调整大小的方向按几次按钮,重新调整拍摄对象上的UIView
的大小,以便它们组合在一起。看这个截图:
目前,用户被要求多次按下“加号”按钮,直到达到所需的大小,但我希望该按钮通过按住按钮来逐步重新调整 UIView
的大小,就像一个线程启动,例如每秒增加UIView
,直到释放按钮。我该如何在 Swift 中做到这一点?我应该创建线程(如果是,如何创建)?我应该使用长按手势识别器吗?
【问题讨论】:
【参考方案1】:您可以使用 NSTimer 创建一个自定义按钮来检测按钮是否按下。我没有测试它,但我想它可以帮助你:
class CustomButton: UIButton
let updateInterval = 0.1
var timer: NSTimer?
var isUserPressing = false
var updateBlock: (() -> Void)?
convenience init()
self.init(frame: CGRect.zero)
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?)
startTimer()
override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?)
stopTimer()
override func touchesCancelled(touches: Set<UITouch>?, withEvent event: UIEvent?)
stopTimer()
private func startTimer()
isUserPressing = true
timer = NSTimer(timeInterval: updateInterval, target: self, selector: "timerUpdated", userInfo: nil, repeats: true)
NSRunLoop.mainRunLoop().addTimer(self.timer!, forMode: NSDefaultRunLoopMode)
private func stopTimer()
isUserPressing = false
timer?.invalidate()
timer = nil
timerUpdated() // to detect taps
private func timerUpdated()
updateBlock?()
你可以这样使用:
let button = CustomButton()
button.updateBlock =
// call your update functions
【讨论】:
酷我喜欢。我马上开始写。谢谢! 注意:NSTimer
不会启动,除非您在之后执行 NSRunLoop.mainRunLoop().addTimer(self.timer!, forMode: NSDefaultRunLoopMode)
我已经更新了答案,你能检查一下是否正确吗?以上是关于Swift:如何通过按住按钮来逐步调整 UIView 的大小的主要内容,如果未能解决你的问题,请参考以下文章
例如,如何制作用于录制音频的保持按钮? (斯威夫特)[关闭]