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 的大小的主要内容,如果未能解决你的问题,请参考以下文章

如何通过在倒数计时器中按住按钮来添加值

Swift - 如何在 MVC 中正确构建按钮?

在 Swift 中按住按钮移动对象

例如,如何制作用于录制音频的保持按钮? (斯威夫特)[关闭]

如何在 Swift 中以编程方式调整 UIButton 中文本的字体大小以适应宽度?

UIStackView中的圆形按钮(iOS Swift)