【问题标题】:How is it I can animate the change in bar tint color of a UINavigationBar but not a UITabBar?我如何为 UINavigationBar 而不是 UITabBar 的条形颜色变化设置动画?
【发布时间】:2015-08-22 03:24:10
【问题描述】:

我正在我的应用程序中实现一个主题,但遇到了一个奇怪的错误(功能?)。出于某种奇怪的原因,我不能在我的自定义 UITabBarController 类中使用 UIView.animate 来为我的 UITabBar 的颜色变化设置动画,但是相同的确切代码在我的 UINavigationController 的自定义类中完美运行。

我错过了什么吗?还有什么我可以用来为颜色变化设置动画的吗?我搜索了 Apple 文档,但一无所获。

这是我在这两种情况下都使用的代码:

class customNavigationController: UINavigationController {
    @IBOutlet weak var navBar = ThemeManager.navigationbar

    func dusk(notification: NSNotification) {
        UIView.animateWithDuration(1, animations: {
            self.navBar?.barTintColor = UIColor(red: 79/255, green: 79/255, blue: 79/255, alpha: 1)
            self.navBar?.barStyle = UIBarStyle.Black

        })
    }
}

还有:

class customTabController: UITabBarController {
    @IBOutlet weak var tab = ThemeManager.tabbar

    func dusk(notification: NSNotification) {
        UIView.animateWithDuration(1, animations: {
            self.tab?.barTintColor = UIColor(red: 79/255, green: 79/255, blue: 79/255, alpha: 1)
            self.tab?.barStyle = UIBarStyle.Black
        })
    }
}

【问题讨论】:

    标签: ios swift animation uinavigationcontroller uitabbarcontroller


    【解决方案1】:

    您可以使用 UIView.transitionWithView 在两种状态之间淡入淡出

    UIView.transitionWithView(self.tab!, duration: 1.0, options: .BeginFromCurrentState | .TransitionCrossDissolve, animations: { () -> Void in
            self.tab!.barTintColor = UIColor(red: 79/255, green: 79/255, blue: 79/255, alpha: 1)
            self.tab!.barStyle = UIBarStyle.Black
        }, completion: nil)
    

    【讨论】:

    • 这对动画完全没有影响:(
    • 这很奇怪,我在发之前自己试过了。你能分享你的代码吗?
    • 和上面第二个引用的代码一样。我替换了UIView.animateWithDuration(1, animations: { self.tab?.barTintColor = UIColor(red: 79/255, green: 79/255, blue: 79/255, alpha: 1) self.tab?.barStyle = UIBarStyle.Black })
    • 对不起,我的意思是你能把我建议的更改粘贴到代码中吗?还是您完全复制并粘贴了我所说的内容?两个主要部分是您正在使用 UIView。 transitionWithView 而不是 animationWithDuration,并且你在选项中有 UIViewAnimationOptions.TransitionCrossDissolve。
    • 我完全按照你的描述做了,但仍然没有:(
    【解决方案2】:

    好吧,要亲自更改标签栏上的颜色,我会使用具有不同颜色的完全不同的图像

    如您所见,我选择的图片是我的第二张图片。现在它不会显示该图像,除非我将它添加到我的“用户定义的运行时属性”

    将 Keypath 设置为“selectedImage”,将类型设置为“Image”,并将值设置为您希望在呈现时显示的图像。我希望这能回答你的问题。

    【讨论】:

      猜你喜欢
      • 2018-03-12
      • 1970-01-01
      • 2011-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多