【问题标题】:Weird UISwitch behaviour奇怪的 UISwitch 行为
【发布时间】:2018-12-21 22:05:51
【问题描述】:

我正在开发一个智能家居应用程序,用户可以在其中切换设备。

如果设备未连接,则拨动开关可能很危险,因此在这种情况下,我使用switch.isOn = false 将开关拨回并显示警报。

有时开关处于冻结状态,用户界面显示它半开(圆圈为左,背景为蓝色)并且属性显示其关闭。

是否有任何已知的解决方法?还是我是唯一遇到此错误的人?

Google 没有显示直接解决此问题的方法

public class MyUIController: UIViewController{
...
weak var switch:UISwitch!

@IBAction
public func toggle(sender:Any){
    if (device.isConnected){
        device.sendUpdate(switch.isOn)
    }else{
        switch.isOn = false
    }
}
...
}

【问题讨论】:

  • 您应该显示您的代码,但如果设备未连接,为什么不禁用开关?这比让用户做某事然后告诉他们他们不能做更好的用户体验
  • 好的,在断开设备和实际更新设备之间有一点超时
  • 好的。您仍然应该禁用该开关。编辑您的问题以显示您的代码。即使您确实检测到设备已断开连接并显示警报,也无需关闭开关,直到警报消失。这可能会解决您的问题
  • 我明天试试,ty
  • 您是从其他地方访问isOn 吗? isConnected 是否在等待一些服务器响应(例如同步调用?)你显示什么样的警报?显示警报时是否有可能截取用户界面的屏幕截图?您是否在某处手动删除动画(例如view.layer.removeAnimations())?

标签: ios swift uikit uiswitch


【解决方案1】:

您应该在设备未连接时禁用开关,以提供更好的用户体验。如果您需要在用户切换后切换开关的状态,请等待动画完成。这将修复冻结和奇怪的图形效果。

switch.isEnabled = false

【讨论】:

  • 我认为您的方法是正确的,但我不知道如何在动画之后运行我的 ibaction,或者从用户点击到事件到达的时间差可能小于动画(异步),因为paulw11 建议明天试试你的想法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-08
  • 2015-07-20
  • 2010-10-03
相关资源
最近更新 更多