滚动时更改 UIButton 色调颜色

Posted

技术标签:

【中文标题】滚动时更改 UIButton 色调颜色【英文标题】:Change UIButton tint color while scrolling 【发布时间】:2016-10-05 15:08:31 【问题描述】:

我有一个自定义表格视图标题,当用户向下滚动时会变得模糊。我想更改导航栏项目之一的色调颜色(它不是导航栏按钮项目,只是一个 UIButton)。我一直在使用 tableviews contentOffset.y 属性为按钮设置动画,并模糊背景图像视图。我也需要对色调进行此操作,但我可以弄清楚如何。

例如,这是使用 alpha 属性缩小个人资料图片并隐藏某些视图的代码

func movingUp(offset: CGFloat) 
    if infoView.alpha >= 0 
        let alphaOffset = (offset - 133)/105.0
        infoView.alpha = alphaOffset*1.2
        profilePic.alpha = alphaOffset
    

    if profileWidth.constant >= 45 
        profilePic.layer.cornerRadius = (((offset - 133)/105.0) * 90)/2
        profileHeight.constant = ((offset - 133)/105.0) * 90
        profileWidth.constant = ((offset - 133)/105.0) * 90
    

【问题讨论】:

你想设置颜色但是你需要有两个极端的颜色。表格视图顶部和表格视图底部的颜色应该是什么?除非您希望它随机更改,否则您需要一个“开始”和“结束”颜色,您希望它在它们之间进行更改。 上方为白色,下方为黑色。 【参考方案1】:

我有一个可以帮助你的答案...http://www.oliverfoggin.com/controlling-animations-with-a-uiscrollview/

这个想法是,您可以通过使用当前内容偏移量并将其用作基于最大偏移量的百分比来在两个极值之间移动。

在您的情况下,这很容易,因为颜色是百分比的简单反函数。

let color = UIColor(white: 1.0 - percentage, alpha: 1.0)

当百分比为 0.0(即表格顶部)时,白色值为 1.0 = 白色。

当百分比为 1.0(即表格底部)时,白色值为 0.0 = 黑色。

我刚刚意识到我的帖子是用 Objective-C 编写的。它应该很容易转换为 Swift,因为它只使用简单的数学函数。如果您希望我转换它,请告诉我,我会放在这里。

【讨论】:

太好了!如果颜色是 UIColor(red: 102/255, green: 102/255, blue: 102/255, alpha: 1) @JeremySh 你需要一个最小值和最大值。您可以在我的帖子中看到我设置了最小和最大色调。此外,如果您对每个值使用相同的数字(例如此处的 102/255),则只需使用 UIColor(white...) 方法而不是 red:green:blue: 方法。

以上是关于滚动时更改 UIButton 色调颜色的主要内容,如果未能解决你的问题,请参考以下文章

我可以更改 UIButton 上的色调颜色,但不能更改 UIImage

导航栏隐藏XCode时状态栏更改色调颜色

根据状态更改 UIButton 中 ImageView 的 tint 颜色

选择时避免 UIButton 反转颜色

在 AppDelegate 中设置 UIButton 外观时如何更改 SafariViewController 中导航栏的色调

Iphone UIButton 背景颜色