UISwitch的开关状态变化时动画失效,可能是由于thumbTintColor改变导致的。

3
我收到了一个设计,其中每个UISwitch都有一个thumbTintColor用于其开启状态,另一个用于关闭状态。我想要实现这个设计,但是到目前为止,我还不知道为什么动画会导致拇指从右向左或从左向右移动的过程完全混乱。

基本上,当开关被点击时,它的拇指不是从一端滑动到另一端,而是变形并立即出现在另一端。这是我能描述这种失真的最接近方式,而不提供实际异常视频。

我的猜测是,这可能与UIKit和某些UIControlsanimatable属性的内部工作方式有关。到目前为止,我得出的唯一结论是放弃标准的UISwitch并制作一个自定义的UIControl,这似乎对于这么微不足道的东西来说有点过头了。

重现此行为的代码位于连接到tableView单元格中的UISwitch的以下方法中:

    @IBAction func allWheelDriveSwitchValueChanged(_ sender: UISwitch) {
    if sender.isOn {
        sender.thumbTintColor = AppColor.myYellow
    } else {
        sender.thumbTintColor = AppColor.darkGray
    }
} 

这里的AppColor是一个包含预设UIColor对象的枚举类型。我尝试将其放入动画块中,并从单元格的contentView调用layoutIfNeeded,但并没有成功。

如有帮助或见解,将不胜感激。

1个回答

0

你尝试过这样做吗?

@IBAction func allWheelDriveSwitchValueChanged(_ sender: UISwitch) {
    if sender.isOn {
        sender.thumbTintColor = UIColor.yellow
    } else {
        sender.thumbTintColor = UIColor.darkGray
    }
}

而不是

@IBAction func allWheelDriveSwitchValueChanged(_ sender: UISwitch) {
    if sender.isOn {
        sender.thumbTintColor = AppColor.myYellow
    } else {
        sender.thumbTintColor = AppColor.darkGray
    }
} 

关于枚举的问题:

放弃原始类型的缺点是必须提供一些逻辑来解析已知的枚举值。然而,好处是你可以将任何其他内容都放入单个未知情况中,同时保留实际的“未知”值以供以后使用。


嗨,我已经尝试过了,问题仍然存在。这个枚举只是一个静态方法的包装器,将十六进制值映射到UIColors,并将这些颜色存储为静态属性。它实际上没有任何情况,只有一个单一的方法,就所有目的而言,它可能就像一个结构体一样,因此与我的问题完全无关。谢谢。 - jonny_89

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接