如何像屏保一样改变CAGradientLayer的颜色?

2024-01-23

我被创造了UIView与申请CAGradientLayer颜色效果如我所附图片所示。现在,我想像屏幕保护程序一样平滑地改变它的渐变颜色从上到下的变化。我已经尝试过使用NStimer有点完成了,但它的颜色在改变CAGradientLayer看起来像个混蛋。

对于上述内容,我使用了以下代码方法:-

Timer =  [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(TIMER) userInfo:nil repeats:NO];

-(void)TIMER
{
        Count++;
        [view_Color1 removeFromSuperview];

        view_Color1 = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 320, 341)];
        CAGradientLayer *gradient = [CAGradientLayer layer];
        gradient.frame = self.view_Color.bounds;

        if (Count == 1)
        {
            gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor greenColor] CGColor], (id)[[UIColor  colorWithRed:44/255.0 green:255/255.0 blue:255/255.0 alpha:1.0f] CGColor], (id)[[UIColor  colorWithRed:0/255.0 green:0/255.0 blue:254/255.0 alpha:1.0f] CGColor], (id)[[UIColor  colorWithRed:252/255.0 green:0/255.0 blue:255/255.0 alpha:1.0f] CGColor], (id)[[UIColor  colorWithRed:252/255.0 green:0/255.0 blue:6/255.0 alpha:1.0f] CGColor], (id)[[UIColor  colorWithRed:253/255.0 green:131/255.0 blue:6/255.0 alpha:1.0f]CGColor], (id)[[UIColor  colorWithRed:255/255.0 green:237/255.0 blue:10/255.0 alpha:1.0f]CGColor], nil];
        }
        else if (Count == 2)
        {
            gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor  colorWithRed:255/255.0 green:237/255.0 blue:10/255.0 alpha:1.0f]CGColor],(id)[[UIColor greenColor] CGColor], (id)[[UIColor  colorWithRed:44/255.0 green:255/255.0 blue:255/255.0 alpha:1.0f] CGColor], (id)[[UIColor  colorWithRed:0/255.0 green:0/255.0 blue:254/255.0 alpha:1.0f] CGColor], (id)[[UIColor  colorWithRed:252/255.0 green:0/255.0 blue:255/255.0 alpha:1.0f] CGColor], (id)[[UIColor  colorWithRed:252/255.0 green:0/255.0 blue:6/255.0 alpha:1.0f] CGColor], (id)[[UIColor  colorWithRed:253/255.0 green:131/255.0 blue:6/255.0 alpha:1.0f]CGColor],nil];
        }
        //and so on still count is 7 then again its 1 to continue here are count use for chagen 7 color gradient use and repeat.

        [self.view addSubview:view_Color1];
        [self.view_Color1.layer addSublayer:gradient];

        [myappdelegare sharedinstance].str_LastColorClick = [[NSString alloc]initWithFormat:@"MultiColor"];
        Timer =  [NSTimer scheduledTimerWithTimeInterval:0.30 target:self selector:@selector(TIMER) userInfo:nil repeats:NO];

}

你能帮我么?

Thanks


我一开始并没有注意到你每一步都在用颜色“跳跃”。

这是执行动画的代码:

- (void) initGradient
{
    if ( !gradient ) {
        gradient = [CAGradientLayer layer];
        gradient.frame = self.view.bounds;
        [self.view.layer addSublayer:gradient];

        NSArray *baseColors = [NSArray arrayWithObjects:(id)[UIColor yellowColor].CGColor, (id)[UIColor redColor].CGColor, (id)[UIColor blueColor].CGColor, (id)[UIColor greenColor].CGColor, nil];
        NSMutableArray *colors = [NSMutableArray arrayWithArray:baseColors];
        [colors addObjectsFromArray:baseColors];
        gradient.colors = colors;

        cnt = [baseColors count];

        NSMutableArray *locations = [NSMutableArray array];
        CGFloat step = 1. / (cnt - 1.);
        CGFloat loc = 0;
        for ( NSUInteger i = 0; i < [colors count]; i++ ) {
            [locations addObject:@(loc)];
            loc += step;
        }
        gradient.locations = [locations copy];
    }
}

-(void)TIMER
{
    NSMutableArray *locations = [NSMutableArray array];
    CGFloat step = 1. / (cnt - 1.);
    static const CGFloat speed = 3;
    CGFloat initialStep = speed / gradient.bounds.size.height;
    CGFloat loc = [gradient.locations[0] floatValue] - initialStep;
    if ( loc <= -1 - step )
        loc = initialStep;
    for ( NSUInteger i = 0; i < [gradient.locations count]; i++ ) {
        [locations addObject:@(loc)];
        loc += step;
    }

    [CATransaction begin];
    [CATransaction setValue:(id)kCFBooleanTrue
                     forKey:kCATransactionDisableActions];
    gradient.locations = [locations copy];
    [CATransaction commit];

    Count++;
    if ( Count >= [gradient.colors count] )
        Count = 0;

    [self performSelector:@selector(TIMER) withObject:nil afterDelay:0.04];
}

它仍然有一个小问题,即视图的顶部像素得到混合颜色,但动画效果很好。您也可以调整速度(静态 CGFloat 速度)。我把这个问题留给你来解决——也许是剪辑。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何像屏保一样改变CAGradientLayer的颜色? 的相关文章

  • 如何检测用户是否第一次打开应用程序[重复]

    这个问题在这里已经有答案了 是否可以检测用户是否是第一次打开iOS应用程序 使用Objective C 我想在用户第一次打开应用程序时显示欢迎消息 但之后不再向他们显示 我正在寻找类似的东西 BOOL firstTime AppDelega
  • 有没有类似于 iOS 的 canOpenURL 来检查移动浏览器的 URL 方案? [复制]

    这个问题在这里已经有答案了 可能的重复 iPhone Safari 检查 JavaScript 是否支持 URL 方案 https stackoverflow com questions 627916 iphone safari check
  • 无法在 ios 应用程序中通过 googlecast 正确投射视频

    我正在开发一个基于 AVPlayer 的自定义视频播放器项目 尝试整合谷歌演员 我已经根据谷歌图进行了集成 https codelabs developers google com codelabs cast videos ios http
  • 错误消息:您输入的捆绑包 ID 已被使用

    我正在尝试发布一个 iPhone 应用程序 这不是第一个 我过去已经发表过其他的 因此 我在第一个和第二个表单中输入了所需的信息 然后填写了第三个大表单 您还可以在其中上传图标和屏幕截图 好吧 我在上传屏幕截图之前按下了 保存 按钮 因为我
  • 从未调用过交互式委托方法

    我想在 ViewController 1 和 NavigationViewController 2 之间进行交互式转换 NavigationController 通过按钮调用 因此呈现时没有交互转换 它可以通过按钮或 UIPanGestur
  • SwiftUI 意外地自动弹出 NavigationLink

    我有一个简单的用例 其中一个屏幕使用 NavigationLink 推送另一个屏幕 iOS 14 5 有一个奇怪的行为 即推送的屏幕在被推送后立即弹出 Code NavigationLink destination EmptyView Em
  • 有没有办法在 Firebase 中等待查询完成?

    我正在使用 TableView 在 Viewcontroller 中的 iOS 应用程序中进行查询 我想确保在继续加载 TableView 之前我的查询已经返回 有没有办法保证查询已经完成 None
  • Xamarin - 错误:dsymutil 退出,代码为 72

    最近升级到 VS for Mac 8 10 21 在构建应用程序时 我得到 Xamarin Shared targets 3 3 Error dsymutil exited with code 72 这是 Xcode 13 3 的情况 完整
  • Objective-C 中是否有相当于 C++ 动态转换的功能?

    如果我有两个类 子类和超类 SuperClass super new SuperClass SubClass sub new SubClass SubClass sub pointer The nice one line cast belo
  • 使用数组中的字符串淡入/淡出标签

    func setOverlayTitle self overlayLogo text Welcome var hello String Bon Jour GUTEN nMORGEN BONJOUR HOLA BUENOS D AS BUON
  • UIViewController 不旋转到横向

    在许多情况下需要旋转控制器但不起作用 现在我遇到了相反的问题 它正在旋转 我想禁用它 在那个 ViewController 中我有这个 BOOL shouldAutorotateToInterfaceOrientation UIInterf
  • AVAudioPlayer 无法从网站播放 m4a 或 mp3 文件类型

    我试图在我的应用程序中找到一个仅纯 m4a 声音的 URL 我有音频的 URL 理论上可以下载它 然后 使用下载的文件URL到声音 我尝试使用AVAudioPlayer播放它 但它不播放任何声音 这是我的代码 在 URL 检索函数中 我调用
  • CATextLayer 上 iOS 6 中不需要的垂直填充

    背景 我在 iOS 5 中开始了我的项目 并构建了一个带有图层的漂亮按钮 我在按钮上添加了一个 textLayer 并使用以下代码将其居中 float textLayerVerticlePadding self bounds size he
  • 无法以编程方式快速设置 NSLayoutConstraint 乘数...“无法分配给此表达式的结果

    我试图以编程方式快速设置乘法器的约束 当我设置该值时 它只会给我错误 无法分配给该表达式的结果 我用 IBOutlet 声明了 NSLayoutConstraint 然后设置乘数 就像我对另一个常量所做的那样 效果很好 但这个不会接受它 I
  • 根据内容自动更改单元格高度 - Swift

    在 Swift 中使用 UITableView 有人可以帮我根据标签 图片和描述自动更改单元格的高度吗 所有信息都正确传递 我只需要帮助格式化它 我尝试使用调整它cell frame size height 但这没有效果 我可以更改故事板中
  • 从现有坐标地图套件中查找最近的位置

    我正在为拥有多家商店的客户开发 iPhone 应用程序 目标 C 我有数组中所有商店 20 的坐标 纬度 长 目前我正在考虑循环遍历商店坐标数组并获取从用户当前位置到商店位置的距离 然后将它们添加到数组中并按最小距离进行排序 这是正确的方法
  • iphone sqlite 静态链接?

    有人静态链接 sqlite 而不是使用动态链接 吗 我遇到的问题是 越狱手机的用户没有与普通 iPhone 所采用的 sqlite 版本相同的版本 因此导致崩溃 我假设在我的应用程序中静态链接已知版本的 sqlite 就是答案 我需要全文支
  • 使用日期 Swift 3 对字典数组进行排序

    我有一个名为 myArray 的数组 其中添加了字典 我希望该字典按时间排序 这是字典中的键 那个时间是在 String 中 时间的日期格式为 yyyy MM dd HH mm ss 我尝试使用下面的代码解决方案 但给出了 从 字符串转换
  • 使用强光混合模式时突出显示伪影

    我正在 iPhone 应用程序中使用顶部图像的 HardLight 混合模式混合两个图像 它看起来像这样 UIGraphicsBeginImageContext size sourceImage drawInRect rectangle b
  • 上传存档错误:“缺少 iOS 发行版签名身份......”

    我正在尝试使用 Xcode 将我的 iOS 应用程序存档上传到 iTunes Connect 但是当我单击 上传到 App Store 时 出现错误 Xcode 尝试查找或生成匹配的签名资产并 由于以下问题未能做到这一点 缺少 iOS 为

随机推荐

  • 如何使用 SSMS 连接到 SQL Server CE 文件

    我正在使用 SSMS 2012 并尝试连接到 Orchard 创建的 SDF 根据这个答案 https stackoverflow com a 1072324 128217 我应该能够选择SQL Server 精简版 as the 服务器类
  • F# 中最优雅的冒泡排序方式是什么?

    F 中最优雅的冒泡排序方式是什么 UPDATE 正如其中一个答案所指出的 冒泡排序在函数式语言中一开始就效率不高 一位幽默愤世嫉俗的评论者还指出 冒泡排序仅适用于列表很小且无论如何都已排序的情况 不过 我很好奇如何在 F 中编写巧妙的冒泡排
  • React Native 中最新的 doctor 命令的目的是什么

    我正在查看最新的 React Native 博客 其中他们介绍了 React Native 的 doctor 命令 从那里我唯一能理解的是为你做一些环境方面的事情 但我不明白目的 确切的目的是什么doctor反应本机命令 The docto
  • 使用 ColdFusion 加密 SagePay 表单

    我正在尝试使用 ColdFusion 10 遵循 SagePay 3 00 中加密字段的规范 要求是使用提供的密码作为密钥和初始化向量 在 CBC 模式下使用 PKCS 5 填充将字符串加密为 AES 块大小 128 位 并将结果编码为十六
  • ObjectARX、RealDWG 还是 Teigha? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我计划开发一款读取和操作 dwg 文件中的数据的软件 我决定使用 RealDWG 或 Teigha 而不是编写自己的库来处理数据文件的 读取 但
  • Admob 发送成人内容,如何禁用此功能?

    我刚刚完成了我的第一个应用程序 我正在使用 Admob 来发布广告 但在我上传到谷歌游戏商店之前 我已经在我的设备上进行了测试 一切都很顺利 直到今晚晚些时候 Admob 开始为成人内容做广告 有什么方法可以禁用此功能 如果有人下载我的应用
  • 以 JSON 形式返回实体框架对象

    我尝试在控制器中使用以下方法将实体框架对象作为 Json 返回 public JsonResult EventList var results from s in db Events select new OrderID s EventID
  • Hibernate/Spring 4 升级后,ClassCastException Proxy36 无法转换为 SessionImplementor

    编辑 我不是在问whatClassCastException 是 我想知道在 Spring 4 Hibernate 4 的这个特定配置下 在 DetachedCriteria 中是什么导致了它 我正在尝试将一些遗留代码升级到 Spring
  • “当站点管理员使用继承的配置文件中的 锁定对此部分的访问时。”

    因此 我在发布 ASP NET MVC 应用程序时收到此错误 它在本地运行良好 当站点管理员锁定对此的访问时 就会发生这种情况 部分使用
  • 将自定义字体添加到 cordova 项目

    我有一个自定义字体 我想在我的应用程序中使用 字体名称是 myfont 扩展名的文件是 myfont eot myfont svg myfont ttf myfont woff myfont woff2 当我进行 cordova 构建时 它
  • 在链表中使用C++模板,列表中出现多种不同类型

    首先 作为免责声明 这与作业有关 我不是要求任何人为我做作业 只是为了尝试帮助我理解如何正确实现模板 我当前的设置是 我有 A 类 这是一个基类 B C D班都是A班的孩子 我正在尝试创建一个链接列表 在单个列表中可以指向 B C 或 D
  • 仅 CSS 砌体布局

    我需要实现砖石布局 但是 出于多种原因 我不想使用 JavaScript 来完成此操作 参数 所有元素都具有相同的宽度 元素的高度无法在服务器端计算 图像加上各种数量的文本 如果必须的话 我可以接受固定数量的列 有一个简单的解决方案可以在现
  • 表单未保存到数据库

    我为 5K 跑步制作了一个表格 用户输入有关他 她的基本信息 名字 姓氏 电子邮件 组织 是否参加活动 并在查看豁免表格后选中复选框 我在最后放置了一个提交按钮 我在将表单连接到数据库时遇到问题 我已经尝试连接并在 mySql 中制作了一个
  • 随机地形生成

    如何制作一个地形生成器来制作更真实的地形 我当前的生成器可以生成这种类型的地形 我怎样才能让它制作出更真实的地形 比如湖泊和河流 基本上 您在生成的地形上定义并应用一组过滤器 我无法详细说明 但我会提供一些提示供您谷歌 沃罗努图 侵蚀过滤器
  • 如何一次一行读取 csv 文件并随时替换/编辑某些行?

    我有一个 60GB 的 csv 文件 需要对其进行一些修改 客户想要对文件数据进行一些更改 但我不想重新生成该文件中的数据 因为这花了 4 天的时间 如何逐行读取文件 不是将其全部加载到内存中 并随时编辑这些行 替换某些值等 这个过程大概是
  • JQuery Ajax Post 导致 500 内部服务器错误

    我正在尝试执行此 AJAX 帖子 但由于某种原因我收到服务器 500 错误 我可以看到它在控制器中遇到了断点 所以问题似乎出在回调上 任何人 ajax type POST url InlineNotes Note ashx id notei
  • 在 Angular 中使用 bigint 文字时模块解析失败

    我正在开展一个个人项目来尝试学习 Angular 框架 我目前是它的新手 但我已经设法 我认为 包含javascriptbigint在打字稿中正确输入数字 通过在 tsconfig json 文件中定位 esnext 版本 因为这工作正常
  • Bootstrap 轮播上的动画高度变化 (v2.3.2)

    我正在尝试使用 Bootstrap 的轮播来处理高度不同的内容 高度会根据浏览器宽度而有所不同 并且轮播下方有内容 我想使用 CSS 来动画幻灯片之间的高度变化 在朋友的帮助下 我几乎可以在 FireFox 中实现此功能 第一张幻灯片跳转
  • 从 Cognito 触发器发送消息

    我想限制用户从 Cognito 托管的 UI 登录 我可以看到有触发器可以附加 lambda 但是每当我更改 lambda 内部的事件对象时 而不是获取自定义消息User exceeded limits I get unrecognizab
  • 如何像屏保一样改变CAGradientLayer的颜色?

    我被创造了UIView与申请CAGradientLayer颜色效果如我所附图片所示 现在 我想像屏幕保护程序一样平滑地改变它的渐变颜色从上到下的变化 我已经尝试过使用NStimer有点完成了 但它的颜色在改变CAGradientLayer看