根据滚动逐渐改变背景颜色

2023-12-01

我有一个滚动视图,当它向下滚动时,背景颜色会改变。

我知道我可以使用 UIView 动画来实现此自动化。但我想根据滚动的百分比设置颜色。

我想设置 0% 和 100% 颜色,并且当前颜色将被计算并设置为scrollViewDidScroll

 0%               50%              100%
yellow           green             blue

EDIT

如何根据滚动位置计算新颜色?


这是 Swift 3 的解决方案。

// This function calculates a new color by blending the two colors.
// A percent of 0.0 gives the "from" color
// A percent of 1.0 gives the "to" color
// Any other percent gives an appropriate color in between the two
func blend(from: UIColor, to: UIColor, percent: Double) -> UIColor {
    var fR : CGFloat = 0.0
    var fG : CGFloat = 0.0
    var fB : CGFloat = 0.0
    var tR : CGFloat = 0.0
    var tG : CGFloat = 0.0
    var tB : CGFloat = 0.0

    from.getRed(&fR, green: &fG, blue: &fB, alpha: nil)
    to.getRed(&tR, green: &tG, blue: &tB, alpha: nil)

    let dR = tR - fR
    let dG = tG - fG
    let dB = tB - fB

    let rR = fR + dR * CGFloat(percent)
    let rG = fG + dG * CGFloat(percent)
    let rB = fB + dB * CGFloat(percent)

    return UIColor(red: rR, green: rG, blue: rB, alpha: 1.0)
}

// Pass in the scroll percentage to get the appropriate color    
func scrollColor(percent: Double) -> UIColor {
    var start : UIColor
    var end : UIColor
    var perc = percent
    if percent < 0.5 {
        // If the scroll percentage is 0.0..<0.5 blend between yellow and green
        start = UIColor.yellow
        end = UIColor.green
    } else {
        // If the scroll percentage is 0.5..1.0 blend between green and blue
        start = UIColor.green
        end = UIColor.blue
        perc -= 0.5
    }

    return blend(from: start, to: end, percent: perc * 2.0)
}

// In your "scrollViewDidScroll" delegate, calculate the scroll 
// percentage as a value from 0.0 to 1.0
// Then call "scrollColor"
let scrollPercentage = ... // your calculation
let scrollColor = scrollColor(percent: scrollPercentage)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据滚动逐渐改变背景颜色 的相关文章

随机推荐

  • 在内存中而不是物理文件中创建 PDF

    如何使用 itextsharp 在内存流而不是物理文件中创建 PDF 下面的代码正在创建实际的 pdf 文件 相反 我如何创建一个 byte 并将其存储在 byte 中 以便我可以通过函数返回它 using iTextSharp text
  • 在多线程应用程序中使用 GeckoFX

    我在使用 GeckoFX 时遇到了如何准确处理线程的问题 当尝试在其他线程中使用 GeckoWebBrowser 时 它似乎不断抛出错误 具体来说 我在此测试应用程序中尝试执行的操作是生成网页的缩略图并将其显示在表单上 而不是 WebBro
  • Delphi - 使用表单在应用程序内安装、启动、停止服务[关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我有 Delphi 应用程序 我添加了service对此 我如何安装并启动和停止它主表格
  • PreferenceActivity 中的自定义标题栏?

    我在所有活动中使用自定义标题栏 但我可以在 PreferenceActivity 中使用它 我在 PreferenceActivity 中能做的就是 Override protected void onCreate Bundle saved
  • Java中的重叠继承

    我有一个重叠的继承层次结构 系统了解可以是客户 提供商和代理的人员 一个人必须属于这些类别之一 但可以属于两个或三个 即一个人可以同时是客户和提供者 在数据库中 我认为问题已经解决 每个类一个表 人员 客户端 提供者和代理表 以及从子类表的
  • 从 Font Awesome 中提取 SVG

    我想从中获取 SVG 路径数据字体真棒字形 以便我可以在 HTML 中直接将它们用作 SVG 我认为这就像复制粘贴路径数据一样简单fontawesome webfont svg 但是当我在 HTML 中使用它时 符号全部呈现颠倒 有人知道为
  • LINQ to Entities - 如何在调用 SaveChanges() 后最好地获取 IDENTITY 值

    该网站上提出了许多与执行插入后检索 IDENTITY 相关的问题 我们获取身份的方法是在调用 SaveChanges 之后立即进行以下调用 context MyClass OrderByDescending c gt c Id FirstO
  • Angular7输入类型文件上传不起作用

    目前我正在工作 Angular Angular 7 输入类型 文件 不工作 Angular6 工作正常 Angular 6提交输入文件类型数据 我会得到这样的字段列表 但 Angular 7 只能得到这样的图像路径 只有我将 Angular
  • 使用 odeint 函数定义

    很菜鸟的问题 所以请耐心听我说 我按照这里给出的例子 gt http www codeproject com Articles 268589 odeint v2 Solving ordinary Differential equations
  • gensim - Doc2Vec:在英语维基百科上训练时出现 MemoryError

    我从英语维基百科转储中提取了 145 185 965 个句子 14GB 我想根据这些句子训练 Doc2Vec 模型 不幸的是我 只有 32GB RAM 并且得到了内存错误当尝试训练时 即使我将 min count 设置为 50 gensim
  • 未定义的类“FirebaseUser”

    我是颤振新手 我有一个问题Firebase 身份验证 Google 身份验证 The Firebase用户没有定义 代码 FirebaseAuth auth FirebaseAuth instance GoogleSignIn google
  • 字符串是不可变的,那么replace()是如何工作的呢?

    我试图用最后一个字母 字符替换字符串的第一个字母 字符 用第一个字母 字符替换最后一个字母 字符 例如 abcd gt dbca Java 中的字符串是不可变的 那么我们如何解释这个程序的行为呢 请看一下最终输出 str1 没有字符 a 但
  • R 中的分层随机抽样

    我正在努力使用具有 3078 个观察值的分层随机抽样来创建大小为 100 的分层样本 分层随机抽样必须满足的条件是 FARMS92600 为 分层 并采用比例分配 当我遵循分层函数时 我不明白如何继续 https gist github c
  • 如何在 SwiftUI 中检测点击手势位置?

    适用于 SwiftUI 而不是普通 UIKit 非常简单的示例代码 例如在灰色背景上显示红色框 struct ContentView View State var points CGPoint CGPoint x 0 y 0 CGPoint
  • 如何应用将向量返回到每个 numpy 数组元素的函数(并获取更高维度的数组)

    我们直接用代码写吧 注意 我将映射器 原始示例使用 x gt x 2 x 3 x 仅作为示例 编辑为通用黑盒函数 这导致了麻烦 import numpy as np def blackbox fn x I can t be changed
  • 将 Symfony2 缓存存储在其他地方?

    有没有办法将 symfony 2 缓存 应用程序 缓存 存储在文件系统以外的其他地方 Memcache S3 还是其他什么 有内置选项吗 您只能通过重载 AppKernel 类中的 getCacheDir 方法将其移出项目目录 将其移至 M
  • 为 UIWebView 请求设置 Cookie

    我想嵌入一个UIWebView进入我的 MonoTouch 应用程序中尚未本地实现的区域 为了对网站进行身份验证 我想设置一个包含当前会话密钥的 cookie 我尝试创建一个NSDictionary与 Cookie 的属性 然后创建一个新的
  • 是否可以修补 File::Find::Rule 以自动处理文件名字符编码/解码?

    假设我有一个名为 UNICODE 0xE6 UTF8 0xC3 0xA6 在当前目录中 然后 我想用File Find Rule找到它 use feature qw say use open qw std utf8 use strict u
  • CMake:在静态库中包含库依赖项

    我正在构建一个staticCMake 中的库 它依赖于许多其他静态库 我希望它们全部包含在输出 lib a 文件中 这样我就可以向客户发送一个大的 lib 文件 在 Visual Studio 2010 中有一个选项 链接库依赖关系 它正是
  • 根据滚动逐渐改变背景颜色

    我有一个滚动视图 当它向下滚动时 背景颜色会改变 我知道我可以使用 UIView 动画来实现此自动化 但我想根据滚动的百分比设置颜色 我想设置 0 和 100 颜色 并且当前颜色将被计算并设置为scrollViewDidScroll 0 5