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);

展示:

【iOS】设置背景渐变色相关推荐

  1. UIView设置背景渐变色

    UIView设置背景渐变色 // Allocate bitmap context CGContextRef bitmapContext = CGBitmapContextCreate(NULL, 32 ...

  2. vue中动态设置背景渐变色

    vue中动态设置背景渐变色 1.效果展示 2.核心(动态更换单一的背景颜色也可以使用) <div class="ss" v-bind:style="{ backgr ...

  3. android自定义渐变色,Android设置背景渐变色

    效果如图,本章只谈背景渐变色,仪表盘下一篇文章 实现步骤,只需两步: 1.在res/drawable中新建一个gradual_color_bg.xml 内容如下: android:startColor ...

  4. iOS: 设置背景颜色为渐变

    最简单的方法是用一个带渐变颜色的png图作为背景. 当然也可以使用代码来实现,但麻烦. ref links: http://www.azumi.cc/thread-511935-1-1.html ht ...

  5. android设置背景颜色渐变,Android背景渐变色(shape,gradient)

    Android设置背景色可以通过在res/drawable里定义一个xml,如下: android:startColor="#FFF" android:endColor=" ...

  6. IOS设置导航栏的背景图片和文字

    IOS设置导航栏的背景图片和文字 - (void)viewDidLoad {[super viewDidLoad];[self.navigationBar setBackgroundImage:[UI ...

  7. html设置body渐变色,css-body背景渐变色的CSS

    css-body背景渐变色的CSS 一.从上往下渐变 body{ FILTER: progid:DXImageTransform.Microsoft.Gradient(gradientType=0,s ...

  8. iOS button设置背景图片后,设置cornerRadius没效果的问题

    问题: button设置背景色时,cornerRadius有效果:但是button设置背景图片时,cornerRadius没效果. 解决办法: 1)button.layer.cornerRadius ...

  9. ios 系统状态栏样式修改_超简单!!! iOS设置状态栏、导航栏按钮、标题、颜色、透明度,偏移等...

    原标题:超简单!!! iOS设置状态栏.导航栏按钮.标题.颜色.透明度,偏移等 1. 要实现以下这些效果都非常简单 2. 废话不多说,先看看实现效果 3. 下面告诉你我为什么说实现这些效果非常简单 比 ...

最新文章

  1. 在web.xml文件中配置Servlet时,主要配置哪些信息?
  2. DSML:深度子空间相互学习模型(用于癌症亚型预测)
  3. 我的第一个纯手写jQuery插件
  4. OpenCV findContours函数参数
  5. 世界上最牛的网络设备,价格低廉,其貌不扬......
  6. 在Winform中播放视频等【DotNet,C#】
  7. Java笔记-SM3(国密3)和SM4(国密4)的使用
  8. html英文字体汇总,笔记 CSS常用中文字体英文名称对照表
  9. 使用 RIP、OSPF 发布默认路由
  10. OkHttp完全解析(七)SPDY协议详细介绍
  11. 产业势能转化下的“厚积厚发”:新计算产业崛起有了“河南力量”
  12. C++银行账户管理程序2
  13. Excel 快捷键大全
  14. node配置邮箱发送验证码
  15. php 私有云盘,私有云盘搭建
  16. 分享一段工具型代码:印章抠图
  17. redis分布式代理工具选型与功能验证
  18. 用佛系的心老王软件Android,老王佛系2.2.19蓝奏云苹果最新版
  19. 如何逆置一个单链表(两种方法)?
  20. 海信电视进入工厂模式,方便adb

热门文章

  1. 数据分析之数据处理(一)
  2. 苹果开发者账号和邓白氏编码申请总结
  3. 前端前端开发工程师_我们庞大的工程师团队会使用此前端开发指南
  4. DVWA 不跳转_终于开通!小红书图文、直播可跳转淘宝链接!
  5. HIDS逐渐的成为主流
  6. 创意视频标题文字模板 Big Titles 2.0 | Premiere Pro
  7. 【亲测】原神3.2+文本教程+视频教程+GM工具
  8. Xilinx FPGA时钟及I/O接口规划(二)
  9. Qt: 读取/写入文本文件内容
  10. 手机QQ与Win8:一蠢再蠢的改版与回炉