【问题标题】:Button to call one function upon being pressed down and to call another when released?按钮在按下时调用一个功能并在释放时调用另一个功能?
【发布时间】:2016-12-07 00:12:15
【问题描述】:

我有一个包含三个按钮的视图。

一个按钮开始录制音频,另一个按钮停止录制音频,第三个按钮播放录制的音频。

我想将记录开始和停止压缩成一个按钮,这样当按下它时它会记录,但当释放它时它会停止记录。

我尝试通过在一个按钮上使用两个事件来开始录制,然后在内部触摸以停止录制,但它似乎无法正常工作。

【问题讨论】:

    标签: ios xcode touch avfoundation avaudiorecorder


    【解决方案1】:

    您应该创建一个视图并将其设置为您想要的按钮,而不是使用 UIButton。

    然后依靠触摸开始和结束方法来提供您想要的功能。

    在这种特殊情况下,我创建了一个您可以使用的自定义视图类。

    以下代码适用于 Swift 3.0:

    class TouchView : UIView {
        override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
            super.touchesBegan(touches, with: event)
    
            // Start recording
        }
    
        override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
            super.touchesEnded(touches, with: event)
    
            // End recording
        }
    }
    

    【讨论】:

      【解决方案2】:

      使用已附加UILongPressGestureRecognizer 的 UIButton。当识别器确定用户在视图上按住手指时,您会收到 .began 消息,而当手指抬起时,您会收到 .ended 消息。设置按钮的isSelected 表示“向下”状态:

      @IBAction func doPress(_ sender: UILongPressGestureRecognizer) {
          switch sender.state {
          case .began:
              (sender.view as! UIControl).isSelected = true
              // start recording
          case .ended:
              (sender.view as! UIControl).isSelected = false
              // stop recording
          default: break
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2021-12-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多