关闭UISwitch动画

时间:2019-01-10 08:55:53

标签: swift xcode animation uiswitch

在我看来,在iOS默认应用中切换开关感觉更加敏捷。看起来动画刚刚关闭。

是否有设置可以更改UISwitch上的这种行为?

这似乎不起作用:

UISwitch.setAnimationsEnabled(enabled: false)

3 个答案:

答案 0 :(得分:1)

我不认为这是一个优雅的解决方案,但是我发现了一个切实可行的hacky解决方案。

UISwitch的子视图具有2个手势识别器:一个用于长按,另一个用于平移。如果将UISwitch子类化,则删除这些手势识别器并在初始化后立即添加一个新的手势识别器,即可实现非动画化行为。

请记住,此解决方案可能无法在将来的iOS版本中使用,因为此解决方案所依赖的内部实现可能会发生变化。

以下是对我有用的代码段:

class PTSwitch: UISwitch {

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)

    let firstSubview = subviews[0]

    guard let gestureRecognizers = firstSubview.gestureRecognizers else {
        return
    }

    for recognizer in gestureRecognizers {
        firstSubview.removeGestureRecognizer(recognizer)
    }

    let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(gestureRecognized))
    firstSubview.addGestureRecognizer(tapGestureRecognizer)
}

@objc func gestureRecognized() {
    setOn(!isOn, animated: false)
}

}

如您所见,我删除了内置手势识别器,并添加了轻击手势识别器。您还可以添加另一个手势识别功能,它也应该起作用。然后,在手势识别器的回调函数中,我仅使用UISwitch的setOn函数和animated: false来禁用动画。

答案 1 :(得分:0)

  

我仍然想知道为什么苹果公司默默地删除了其系统应用程序中的动画。 –非主题

iOS默认应用程序中的许多区域都使该动画无效UISwitch-“开/关”按钮

  • Wi-Fi,个人热点,位于Settings.app下

  • 在Clock.app中设置闹钟

例如断断续续的按钮动画

  • Settings.app下的粗体文本(激活该选项,然后显示一条消息并点击“取消”)
  • 打开App Store.app创建Apple ID并确认使用条款
  • 还有很多其他领域...

在我的iPad 9.7上,可重现iOS 12.2的iPhone 5S和iPhone XS Max。这是错误,因为iOS 7和Apple从未针对iOS默认应用程序解决此问题。

许多第三方应用程序都具有相同的错误,因为自iOS 7以来,直到今天,它都尚未得到正确修复。开发人员始终必须自行检查并在其应用程序中(或由用户发现)对其进行修复。 对于特殊工艺,例如开/关按钮接管许多功能的情况会更糟。许多动画(自iOS 7起)已损坏。

注意!! 在iOS 6(iPhone 5),iOS 5(iPhone 4S)中,UISwitch没问题-iOS默认应用程序下的“开/关”按钮动画(没有损坏)。所有第三方应用程序也都没有这些问题,这是当时在此iOS版本下开发的。

答案 2 :(得分:-1)

在UISwitch上,您可以使用动画参数= false调用setOn