Quartz2D之渐变使用初步

iOS 2D绘图详解(Quartz 2D)之阴影和渐变(Shadow,Gradient) 原创Blog,转载请注明出处 http://blog.youkuaiyun.com/hello_hwc?viewmode=list 我的stackoverflow前四篇基础博客路径 iOS 2D绘图详解(Quartz 2D)之概述 iOS 2D绘图详解(Quartz 2D)之路径(点,直线,虚线,曲线,圆弧,椭圆,矩形) iOS 2D绘图详解(Quartz 2D)之路径(stroke,fill,clip 阅读详情

Quartz2D提供了两种渐变填充方法。第一种是使用Quartz自带的Gradient填充方法;第二种是使用自定义的着色器。

这里将先描述如何使用CGGradient对象来做渐变填充。

// Drawing code
 
// 创建Quartz上下文
CGContextRef context = UIGraphicsGetCurrentContext();
 
// 创建色彩空间对象
CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB();
 
// 创建起点颜色
CGColorRef beginColor = CGColorCreate(colorSpaceRef, (CGFloat[]){0.01f, 0.99f, 0.01f, 1.0f});
 
// 创建终点颜色
CGColorRef endColor = CGColorCreate(colorSpaceRef, (CGFloat[]){0.99f, 0.99f, 0.01f, 1.0f});
 
// 创建颜色数组
CFArrayRef colorArray = CFArrayCreate(kCFAllocatorDefault, (const void*[]){beginColor, endColor}, 2, nil);
 
// 创建渐变对象
CGGradientRef gradientRef = CGGradientCreateWithColors(colorSpaceRef, colorArray, (CGFloat[]){
    0.0f,       // 对应起点颜色位置
    1.0f        // 对应终点颜色位置
});
 
// 释放颜色数组
CFRelease(colorArray);
 
// 释放起点和终点颜色
CGColorRelease(beginColor);
CGColorRelease(endColor);
 
// 释放色彩空间
CGColorSpaceRelease(colorSpaceRef);
 
CGContextDrawLinearGradient(context, gradientRef, CGPointMake(0.0f, 0.0f), CGPointMake(320.0f, 460.0f), 0);
 
// 释放渐变对象
CGGradientRelease(gradientRef);

上述代码效果将产生一个由绿到蓝的一个渐变填充矩形。

这里使用了CGColor和CFArray来作为设置渐变颜色的参数。另外, CGGradientCreateWithColors的最后一个locations参数可以传空,这样默认为从0.0到1.0。


以上画的是两种颜色的渐变,是由绿到靛蓝。下面我们来看一下三层颜色的渐变:

// 创建Quartz上下文
CGContextRef context = UIGraphicsGetCurrentContext();
 
// 创建色彩空间对象
CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB();
 
// 创建渐变对象
CGGradientRef gradientRef = CGGradientCreateWithColorComponents(colorSpaceRef, 
                                                                (CGFloat[]){
                                                                    0.01f, 0.99f, 0.01f, 1.0f,
                                                                    0.01f, 0.99f, 0.99f, 1.0f,
                                                                    0.99f, 0.99f, 0.01f, 1.0f
                                                                }, 
                                                                (CGFloat[]){
                                                                    0.0f,
                                                                    0.5f,
                                                                    1.0f
                                                                }, 
                                                                3);
 
 
// 释放色彩空间
CGColorSpaceRelease(colorSpaceRef);
 
// 填充渐变色
CGContextDrawLinearGradient(context, gradientRef, CGPointMake(0.0f, 0.0f), CGPointMake(320.0f, 460.0f), 0);
 
// 释放渐变对象
CGGradientRelease(gradientRef);

上述代码绘制了三种颜色的渐变色,由绿到靛蓝到黄色。并且在45度轴方向上的颜色都是一样的。


当然,我们也可以通过改变矩形两点坐标的位置来改变渐变轴的方向,并且也可以设置关键颜色的位置:

// 创建Quartz上下文
CGContextRef context = UIGraphicsGetCurrentContext();
 
// 创建色彩空间对象
CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB();
 
// 创建渐变对象
CGGradientRef gradientRef = CGGradientCreateWithColorComponents(colorSpaceRef, 
                                                                (CGFloat[]){
                                                                    0.01f, 0.99f, 0.01f, 1.0f,
                                                                    0.01f, 0.99f, 0.99f, 1.0f,
                                                                    0.99f, 0.99f, 0.01f, 1.0f
                                                                }, 
                                                                (CGFloat[]){
                                                                    0.1f,
                                                                    0.5f,
                                                                    0.9f
                                                                }, 
                                                                3);
 
 
// 释放色彩空间
CGColorSpaceRelease(colorSpaceRef);
 
// 填充渐变色
CGContextDrawLinearGradient(context, gradientRef, CGPointMake(0.0f, 460.0f), CGPointMake(320.0f, 0.0f), 0);
 
// 释放渐变对象
CGGradientRelease(gradientRef);

运行上述代码后我们可以发现,渐变轴被旋转了90度。而且蓝色与黄色区域也有所增大,更靠近矩形的中心。

iOS 实现背景颜色渐变的方式 iOS里面的背景颜色实现渐变的方式有两种,第一种就是给一个渐变的图片做背景,当然这样有很大的局限性,比如我现在就需要根据项目需求要动态的改变渐变背景色。 这样首先想到quartz 2D 这里的知识进行绘图,我根据需要在自定义视图里面的drawRect方法进行绘制。 - (void)drawRect:(CGRect)rect { /** * 1.通过CAGr 阅读详情

相关推荐

RAG 赋能客服机器人:多轮对话与精准回复

在人工智能技术飞速发展的今天,客服机器人已成为企业提升服务效率的重要工具。然而,传统客服系统在多轮对话连贯性和精准回复能力上存在明显短板。检索增强生成(Retrieval-Augmented Generation, RAG)技术通过结合大语言模型(LLM)与外部知识库,为解决这一问题提供了创新路径。本文将深入探讨 RAG 在客服机器人中的应用,重点分析其如何实现多轮对话与精准回复,并结合实际案例与技术框架展开讨论。

shuizhudan223的博客 2142

博客浏览:Quartz 时间配置详解

下面有一些关于 Quartz 时间配置的说明: 字段顺序 允许值 允许的特殊字符 秒   0-59   , - * / 分   0-59   , - * / 小时   0-23   , -

luoenjun90的专栏 500

SAP采购订单中项目类别B(限制)的控制逻辑

在笔者所在企业中,框架类采购订单中项目类别需要选择B(限制)。今天笔者从比较全面的角度分析了一下这个项目类别B到底可以决定些什么?控制到什么?先从后台SPRO中打开相应的配置菜单。 打开项目类别B之后,可以看到一些配置信息,这里有一点与其它配置不同的地方,即无法新增项目,也无法修改现有项目。这个疑惑今后再去解决吧。当前只研究项目类别B的控制逻辑。 下面就参考上图中的配置分段来分析和测试其控制逻辑, 1、如项目类别配置图,所需材料值为不允许;经测试,如下图在采购订单创建时,不能输入物料编号条目。

专注SAP应用技术文章写作,致力于拉近用户与系统间的距离; 6032

Quartz

定时执行程序-Quartz简单实例 1、加jar包:Quartz自己quartz-1.8.3.jar和依赖包commons-logging.jar  、slf4j-log4j12-1.5.10.jar 、slf4j-api-1.5.10.jar 2、一个类搞定!!!,直接run import  org.quartz.CronTrigger;  import  org.quartz.Job...

飞上云端看彩虹 522

ESXI 8.0虚拟机安装OpenWRT软路由详细教程

OpenWrt 是嵌入式的 Linux 路由器固件,OpenWrt在稳定运行的同时提供了强大的扩展能力,用户可以完全的定制属于自己的路由系统,满足不一样的个性化需求,本文讲解如何使用ESXI安装OpenWRT,打造属于自己的软路由。本次安装使用的是版本。默认登录信息:用户:root密码:password下载固件:https://github.com/haiibo/OpenWrt/releases/tag/X86_64【CPU配置】:4核心。

qq_27121281的博客 3912

手把手教你用Cadence Virtuoso设计折叠式共源共栅放大器(0.18μm工艺实战)

本文详细介绍了在0.18μm工艺下使用Cadence Virtuoso设计折叠式共源共栅放大器的完整流程。从工艺参数获取、电路架构分析到具体参数计算和仿真验证,提供了实战设计指南,帮助工程师掌握这一模拟IC设计中的关键技术,特别适合需要中等增益和较大输出摆幅的应用场景。

open4的博客 405

iOS开发UI篇—Quartz2D简单使用(一)

iOS开发UI篇—Quartz2D简单使用(一) 一、画直线 代码: 1 // 2 // YYlineview.m 3 // 03-画直线 4 // 5 // Created by apple on 14-6-9. 6 // Copyright (c) 2014年 itcase. All rights reserved. 7 // 8 9 #i...

weixin_33826609的博客 126

EEMD算法原理及应用

本博客主要概括EEMD算法的背景、原理以及应用,利用EEEMD对信号进行分解,然后选择有用的IMF分量进行叠加以完成信号的重构,从而实现对信号降噪。本文配套的源代码见文中链接,可供大家免费下载。

总结论文中的算法并给出论文的复现代码 4万+

Quartz 2D之线性渐变和径向渐变

Quartz 2D的渐变方式分为两种:      a.线性渐变线:渐变色以直线方式从开始位置逐渐向结束位置渐变      b.径向渐变:以中心点为圆心从起始渐变色向四周辐射,直到终止渐变色         要做渐变则必须先设置从开始位置到结束位置的渐变颜色,做过photoshop的朋友相信对于渐变色设置并不陌生,只要在指定位置指定不同的颜色,剩下的事情交给系统处理即可,如下图在起始位置、3/

欢迎来到Jack的程序世界 1529

如何修改网页中的文本内容改成自己希望的数值?

本篇文章主要讲解,通过浏览器命令和浏览器自带的F12开发者工具,进行修改网页内容的方法教程 日期:2021年12月5日 作者:任聪聪 一、通过F12开发者工具进行修改 进入方式汇总: 1.右击鼠标,显示菜单找到审查 2.通过快捷键F12进入,笔记本需要先关闭fnlk功能键。 开发者工具介绍 说明: 1.表示选择元素,点击后可以选择文本的元素所在地 2.表示显示方式,手机还是电脑 3.表示div元素,点击后可以展开,对div内的html和文本进行编辑。 双击文本,即可进行修改成自己想要的,但是刷新后.

任聪聪的博客 2万+

python爬虫项目(六十八):爬取电商平台用户购买历史数据,分析消费行为

本文详细介绍了如何爬取电商平台用户购买历史数据,并分析其消费行为。通过爬虫技术、数据存储、分析和可视化等步骤,可以深入了解消费者的行为特征。未来,随着数据分析技术的不断发展,利用人工智能和机器学习方法对消费行为进行更深层次的分析,将成为电商平台提升竞争力的重要手段。

斌擎科技 2767

Quartz2D之渐变

转载自:http://www.cnblogs.com/zenny-chen/archive/2012/02/23/2364152.html Quartz2D提供了两种渐变填充方法。第一种是使用Quartz自带的Gradient填充方法;第二种是使用自定义的着色器。 这里将先描述如何使用CGGradient对象来做渐变填充。 // Drawing code

逢个场,作个戏 287

Python全栈项目--手机语音远程控制智能家居系统(含嵌入式控制)

摘要:本项目实现了一个基于Python全栈的智能家居语音控制系统,支持手机端语音指令控制家居设备。系统采用FastAPI后端+Vue3前端的架构,集成Web Speech API实现语音识别,通过嵌入式设备(如ESP32)执行硬件控制。功能包括用户认证、设备管理、场景联动、指令解析和日志记录,支持HTTP轮询和直推两种命令下发模式。项目涵盖物联网全链路开发,适用于课程设计或毕业设计原型开发。

exlink2012的专栏 877

36. Quartz 2D之渐变和裁剪

Quartz 2D之渐变和裁剪渐变分为两种: 线性渐变和径向渐变, 我们将学习使用它:1. 线性渐变// MARK: - 绘制渐变 // MARK: 线性渐变 func drawGradient(context: CGContextRef?) { // 1. 绘制渐变 // 创建渐变 let components: [CGFloat] = [1.0, 0.0, 0.0, 1.0

邪恶枫叶的博客 649

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Apple - Quartz 2D Programming Guide

一、介绍 1、关于 Quartz 2D 2、谁应该阅读本文档? 3、本文档的组织 4、也可以看看 二、Quartz 2D 概述 1、本节内容 2、绘制目标:图形上下文 3、Quartz 2D 不透明数据类型 4、图形状态 5、Quartz 2D 坐标系 6、内存管理:对象所有权 三、图形上下文 1、在 iOS 中绘制到视图图形上下文 2、在 Mac OS X 中创建窗口图形上下文 3、创建 PDF 图形上下文 4、创建位图图形上下文 支持的像素格式 抗锯齿 5、获取用于打印的图形上下文 四、路径 1、路径创

AI工程化、开源分享、文档翻译、代码笔记 1557

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

iOS 2D绘图 (Quartz2D)之阴影和渐变(shadow,Gradient)

原博地址:http://blog.youkuaiyun.com/hello_hwc/article/details/49507881 Shadow Shadow(阴影) 的目的是为了使UI更有立体感,如图 shadow 主要有三个影响因素 x off-set 决定阴影沿着X的偏移量 y off-set 决定阴影沿着y的偏移量 blur value 决定了阴影的边缘区域是不是模糊的...

ddiv24492的博客 255

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Quartz 2D简介

什么是Quartz 2D? Quartz 2D是Apple的2D绘图引擎,是Core Graphics框架的重要组件。 您可能经常会看到Quartz 2D被称为Core Graphics或简称为CG。 Quartz 2D使用“画家的模型”。 在绘画者的模型中,每个连续的绘画操作将一层“绘画”应用于通常称为页面的输出“画布”。 可以将其想象为从事绘画工作的艺术家。 如果艺术家将整个画布涂成蓝...

Web design 教程小屋 472

iOS Quartz2D 渐变图形 CGGradient CGShading

最近在学习iOS Quartz2D二维图形绘制--->渐变效果      Quartz2D 渐变      Quartz提供了两个不透明数据odgago创建渐变: CGShadingRef 和 CGGradientRef      可以使用任何一种来创建轴向(axial)或径向(radial)渐变.一个渐变是从一个颜色到另一个颜色的填充      一个轴向渐变(也成为线性渐变)

Heath 5648

Quartz2D颜色渐变效果

Quartz2D之渐变使用初步 Quartz2D提供了两种渐变填充方法。第一种是使用Quartz自带的Gradient填充方法;第二种是使用自定义的着色器。 这里将先描述如何使用CGGradient对象来做渐变填充。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 2

帅帅的专栏 810
上一篇: 判断移动设备访问自动跳转到移动版页面
下一篇: iOS开发——密码存储之keychain的使用
mmoooodd
博客等级 码龄18年 35粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值