【问题标题】:Swift: how to disable user interaction while touch action is being carried out?Swift:如何在执行触摸操作时禁用用户交互?
【发布时间】:2015-03-16 01:14:44
【问题描述】:

我正在使用 sprite kit,如果用户触摸屏幕,

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
    /* Called when a touch begins */

    for touch: AnyObject in touches {
    }
}

进行。然而,当它们被执行时,用户仍然可以点击屏幕并且应用程序会尝试再次运行这些操作。

如何在动作运行时禁用触摸交互/触摸功能内的动作?

【问题讨论】:

    标签: swift


    【解决方案1】:

    要在应用范围内禁用用户交互,请使用:

    UIApplication.shared.beginIgnoringInteractionEvents()
    UIApplication.shared.endIgnoringInteractionEvents()
    

    (从 Swift 5 开始,这已被弃用)

    【讨论】:

    • iOS 13 后已弃用
    【解决方案2】:

    尝试从触摸对象获取视图,然后禁用用户交互。

    touch.view.isUserInteractionEnabled = false
    

    【讨论】:

    • 我不明白为什么,但这个解决方案对我不起作用。这里提出的所有解决方案都适合我。我不明白原因。
    【解决方案3】:

    Swift 3.0 中是:

    self.view.isUserInteractionEnabled = false
    

    【讨论】:

    • Xcode 9.4.1 SDK 11.4 Swift 4.1:还是和上面一样 self.view.isUserInteractionEnabled = false
    • 在 Swift 5.2 上仍然相同。
    【解决方案4】:

    您可以在方法执行时使用布尔类变量来停止交互,之后您可以在方法结束时更改布尔值。

    在第一种方法的末尾使用UIApplication.shared.beginIgnoringInteractionEvents(),然后更改布尔值,然后使用另一种方法,起始行为UIApplication.shared.endIgnoringInteractionEvents()

    【讨论】:

      【解决方案5】:

      对于 SwiftUI,扩展 @mojtaba-hosseini 答案。 你想确保你用一些颜色填充你的视图,除了清除颜色(你总是可以改变不透明度)。我还添加了模糊来隐藏元素。这对我有用:

      SwiftUI:

      ZStack{
          SomeView().blur(radius: 12)
          Rectangle()
              .fill(Color.white.opacity(0))
              .allowsHitTesting(false)
      }
      

      另一种禁用用户交互的方法,如滚动或按钮点击,但在用户点击时附加一个操作(例如,向用户发送此功能即将推出或在付费墙后面的消息):

      SwiftUI:

      VStack{
          SomeView().blur(radius: 12)
      }
      .contentShape(Rectangle())
      .onTapGesture {
          print("No access!")
      }
      

      【讨论】:

        【解决方案6】:

        - SwiftUI

        SomeView()
        .allowsHitTesting(false)
        

        【讨论】:

          【解决方案7】:

          只需转到情节提要并在您要禁用用户交互的任何对象中取消选中此选项

          【讨论】:

            【解决方案8】:

            如果您想禁用 Buttons 用户的交互,只需在屏幕加载时执行此操作。

            self.btnname.isUserInteractionEnabled = false
            

            如果您想禁用视图作为用户交互,则只需删除按钮名称并添加视图名称即可。

            如果由于某些原因,您想启用交互,只需将“false”更改为“true”即可。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2012-03-18
              • 1970-01-01
              • 2012-06-14
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多