当前位置: 首页 > news >正文

【iOS】设置背景渐变色

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.lryc.cn/news/29306.html

相关文章:

  • Scrapy框架(高效爬虫)
  • 程序设计语言-软件设计(二十一)
  • 【小破站下载工具】Python tkinter 实现网站下载工具,所有数据一键获取
  • C51---IO口状态翻转
  • 2023年春【移动计算技术】文献精读(一)-1 ||| 附:【Markdow语法】向上取整 向下取整。
  • Java 包装类的二进制操作
  • CSS居中之 { left:50%; top:50%; transform:translate(-50%,-50%); }
  • AcWing 4868. 数字替换(DFS + 剪枝优化)
  • 【教学典型案例】01.redis只管存不管删除让失效时间删除的问题
  • 电话号码管理
  • Shell 教程
  • Shader 阴影
  • 【冲刺蓝桥杯的最后30天】day2
  • docker系列1:docker安装
  • 内核角度谈谈Linux进程和线程
  • 【mmdeploy部署系列】使用Tensorrt加速部署mmpose人体姿态库
  • IDEA 每次新建工程都要重新配置 Maven 解决方案
  • 【C++修炼之路】25.哈希应用--布隆过滤器
  • linux入门---权限
  • Unity记录2.1-动作-多段跳、蹬墙跳、墙体滑落
  • Spring Boot结合IDEA自带Maven插件快速切换profile | Spring Cloud 10
  • ES 7.7.0 数据迁移
  • 【玩转c++】vector讲解和模拟底层实现
  • 基本类型、包装类型、引用类型、String等作为实参传递后值会不会改变?
  • Tomcat服务器配置以及问题解决方案
  • 【Node.js】HTTP协议、HTTP的请求报文和响应报文
  • CodeForce 455A. Boredom
  • geoserver之BlobStores使用
  • 跨域问题以及Ajax和Axios的区别
  • 现代卷积神经网络(AlexNet)