【iOS】设置背景渐变色

news2024/11/17 13:32:11

drawRect函数

主要负责iOS的绘图操作,程序会自动调用此方法进行绘图。我在这个函数中绘制渐变背景色。

方法定义:

  • -(void)drawRect:(CGRect)rect;
    重写此方法,执行重绘任务
  • -(void)setNeedsDisplay;
    标记为需要重绘,异步调用drawRect
  • -(void)setNeedsDisplayInRect:(CGRect)rect;
    标记为需要局部重绘

调用机制:

  1. 系统自动调用,在Controller->viewDidLoad之后。但是如果在UIView初始化时没有设置rect大小,将直接导致drawRect不被自动调用。
  2. 直接调用setNeedsDisplay,或者setNeedsDisplayInRect:触发drawRect:,但是有个前提条件是rect不能为0.。

绘制方法

利用CALayer或CGGradientRef绘制。

CALayer

利用CALayer的子类CAGradientLayer绘制渐变背景色。

// 初始化
CAGradientLayer* layer = [[CAGradientLayer alloc] init];
    
// 颜色数组,设置需要过渡的颜色(CGColor对象)。
layer.colors = @[(__bridge id)[UIColor colorWithRed:0.439f green:0.522f blue:0.714f alpha:1].CGColor, (__bridge  id)[UIColor colorWithRed:0.529f green:0.655f blue:0.851f alpha:1].CGColor, (__bridge  id)[UIColor whiteColor].CGColor];
    
// 开始位置与结束位置。(0, 0)左上角,(1, 1)右下角
layer.startPoint = CGPointMake(0.5, 0);
layer.endPoint = CGPointMake(0.5, 1);

// layer大小
layer.frame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height / 3);
    
[self.layer addSublayer:layer];

展示:
在这里插入图片描述

CGGradientRef

// 图形上下文
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    // 颜色空间
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    
    // 创建颜色数组
    // 由于指定RGB颜色空间,四个数组元素代表一个颜色(r, g, b, alpha)
    CGFloat compoents[12] = {
        0.2, 0.2, 0.2, 1,
        0.4, 0.4, 0.4, 1,
        0.8, 0.8, 0.8, 1
    };
    
    // 渐变位置(0~1),数组元素个数不小于颜色数
    CGFloat locations[3] = {0, 0.4, 0.8};
    
    // 创建梯度上下文
    CGGradientRef gradient = CGGradientCreateWithColorComponents(colorSpace, compoents, locations, 3);
    
    // 绘制线性渐变
    /*
     startPoint与endPoint:起始于结束位置,需要位置坐标
     options:绘制方式
     kCGGradientDrawsBeforeStartLocation 开始位置之前就进行绘制,到结束位置之后不再绘制,
     kCGGradientDrawsAfterEndLocation 开始位置之前不进行绘制,到结束点之后继续填充
     */
    CGContextDrawLinearGradient(ctx, gradient, CGPointMake(self.frame.size.width/2, 0), CGPointMake(self.frame.size.width/2, self.frame.size.height/3), kCGGradientDrawsAfterEndLocation);
    
    // 释放颜色空间
    CGColorSpaceRelease(colorSpace);

展示:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/389309.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mysql开发

Mysql开发 可以使用MySQL直接存储文件吗? 可以使用 BLOB (binary large object),用来存储二进制大对象的字段类型。 TinyBlob 255 值的长度加上用于记录长度的1个字节(8位) Blob 65K值的长度加上用于记录长度的2个字节(16位) MediumBlob 16M值的长度加…

vue-v-for列表渲染中key的作用

1.虚拟DOM中key的作用: key是点拟DON对象的标识,当状态中的数据发生变化时,Vue会根据【新数据】生成【新的虚拟DOM】,随后Vue进行【新虚拟DOM】与【旧虚拟DOM】的差异比较,比较规则如下 2.对比规则: 旧虚拟DOM中找到了与新虚拟DOM相同的ke…

【NLP相关】ChatGPT的前世今生:GPT模型的原理、研究进展和案例

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…

【二分查找】分巧克力、机器人跳跃、数的范围

Halo,这里是Ppeua。平时主要更新C语言,C,数据结构算法......感兴趣就关注我吧!你定不会失望。 🌈个人主页:主页链接 🌈算法专栏:专栏链接 我会一直往里填充内容哒! &…

二层如何避免loop 的产生

STP是一个用于局域网中消除环路的协议。STP通过构造一棵树来消除交换网络中的环路二层交换机二层交换机不具备路由能力,主要功能有三种1)地址学习(address learning):通过查看帧的源MAC地址来加紧转发/过滤表的MAC地址…

django框架开发部署项目

前言:相信看到这篇文章的小伙伴都或多或少有一些编程基础,懂得一些linux的基本命令了吧,本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。 文章使用到的的工具 Python:一种编程语言&…

工作负载使用教程

主要包括YCSB和背景一、安装Java二、安装Memcached数据库并配置三、修改YCSB脚本文件四、运行YCSB脚本五、运行GAPBS总结背景 测试multi-clock内核的内存性能有啥提升 YCSB:雅虎推出的云数据库基准测试套件 参考论文MULTI-CLOCK: Dynamic Tiering for Hybrid Memor…

03-产品解决方案:需求分析、功能优先级划分、功能价值、用户体验

文章目录3.1 需求分析3.1.1 需求分析的目的3.1.2 需求分析的方法(Y模型)3.1.3 需求分析的具体应用3.2 功能优先级划分Kano模型3.3 功能价值3.3.1 什么是功能价值?3.3.2 实际价值判断3.3.3 成本评估3.4 用户体验3.4.1 用户体验的定义及影响因素…

IDEA 每次新建工程都要重新配置 Maven 解决方案

IDEA 每次新建工程都要重新配置 Maven 解决方案 IDEA 每次新建工程都要重新配置 Maven,是一件相当浪费时间的事情。这是因为在创建一个项目后,在 File -> Settings -> Build,Execution,Deployment -> Build Tools -> Maven下配置了 Maven h…

华为OD机试用Python实现 -【停车找车位】 |2023.Q1 A卷

华为OD机试题 最近更新的博客华为 OD 机试 300 题大纲本篇题目:停车找车位题目描述输入描述输出描述示例一输入输出示例二输入输出代码编写思路Python 代码最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题

QML编码约定

QML中的国际化: QML使用以下函数来将字符串标记为可翻译的 qsTr()qsTranslate()qsTrld()QT_TR_NOOP()QT_TRANSLATE_NOOP()QT_TRID_NOOP最常用的还是qsTr() string qsTr(string sourceText, string disambiguation&…

Linux- 系统随你玩之--文件管理-双生姐妹花

文章目录1、前言2、文件管理-双生姐妹花2.1、 df2.1.1、 df 语法2.1.1 、常用参数2.2、 du2.2.1、du 语法2.1.1、 常用参数2.3、双生姐妹花区别2.3.1、 查看文件统计 的计算方式不同2.3.2 、删除文件情况下统计结果 不同2.3.3 、针对双生姐妹花区别 结语3、双生姐妹花实操3.1 、…

[2019红帽杯]childRE

题目下载:下载 参考:re学习笔记(24)BUUCTF-re-[2019红帽杯]childRE_Forgo7ten的博客-CSDN博客 这道题涉及到c函数的修饰规则,按照规则来看应该是比较容易理解的。上面博客中有总结规则,可以学习一下。 载…

不同的网络分层模型与其常见的协议和硬件

文章目录一、网络分层模型1.1 OSI七层参考模型1.2 TCP/IP分层模型1.3 数据的分层传输二、网络通信媒介和数据链路2.1 网卡2.2 中继器Repeater2.3 集线器交换机(二层设备) 比集线器升级了什么二层交换机和三层交换机说明:该博客粗略整理了下不同的网络模型&#xff0…

Vue3之组件间传值避坑指南

组件间传值的两个坑 我们都知道父组件可以把值传递到自组件中,但是有时候子组件需要修改这个父组件传递过来的这个值,我们可以想象下能修改成功吗?这是坑之一。我们在组件间传值的时候,都是一个属性名对应一个值,接收…

泛函分析导论

它的基本思想是将函数看作向量,从而将函数空间转化为向量空间,进而研究函数空间的性质。泛函分析的主要内容包括:线性空间、内积空间、赋范空间、希尔伯特空间、算子理论、谱理论、函数空间等。空间与算子度量空间赋范空间和巴拿赫空间线性算…

Mybatis插件开发及执行原理

mybatis源码下载 https://github.com/mybatis/mybatis-3,本文分析源码版本3.4.5 mybatis启动大致流程 在看这篇文章前,建议查看我另一篇文章,以了解框架启动的流程和框架中一些重要对象:https://blog.csdn.net/Aqu415/article/…

com.alibaba.nacos.shaded.io.grpc.netty.shaded.io.netty.channel.AbstractChannel

一 完成的错误信息 异常Message one Caused by: com.alibaba.nacos.shaded.io.grpc.netty.shaded.io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: no further information 异常Message two [com.alibaba.nacos.client.remote.worker] ERROR…

K8S 实用工具之二 - 终端 UI K9S

开篇 📜 引言: 磨刀不误砍柴工工欲善其事必先利其器 第一篇:《K8S 实用工具之一 - 如何合并多个 kubeconfig?》 像我这种,kubectl 用的不是非常溜,经常会碰到以下情况: 忘记命令,先…