【IOS 开发学习总结-OC-67】Quartz 2D绘图(4-4)——图形变换+填充处理+core image 滤镜

本文主要介绍了iOS开发中Quartz 2D的图形变换技巧,包括平移、缩放和旋转坐标系统,以及如何保存和恢复绘图状态。同时,详细探讨了填充处理,如渐变和模式填充,并讲解了Core Image滤镜的使用,展示了如何在移动应用中实现类似Photoshop的效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【IOS 开发学习总结-OC-67】Quartz 2D绘图(4-4)——图形变换+填充处理+core image 滤镜

Quartz 2D提供了坐标变换支持,这样开发的时候 我们不许繁琐计算每个点坐标,只需对坐标系统整体变换即可。

使用坐标变换

Quartz 2D坐标变换的方法:
1. CGContextTranslateCTM(<#CGContextRef _Nullable c#>, <#CGFloat tx#>, <#CGFloat ty#>)——平移坐标系统;
2. CGContextScaleCTM(<#CGContextRef _Nullable c#>, <#CGFloat sx#>, <#CGFloat sy#>)——缩放坐标系统;
3. CGContextRotateCTM(<#CGContextRef _Nullable c#>, <#CGFloat angle#>)——旋转坐标系统

保存,恢复绘图状态的方法——进行坐标转换的时候无需计算多次坐标变换后的累加结果

  1. CGContextSaveGState(<#CGContextRef _Nullable c#>)——保存之前的绘图状态;
  2. CGContextRestoreGState(<#CGContextRef _Nullable c#>)——恢复之前保存的绘图状态;
    CGContextSaveGState(<#CGContextRef _Nullable c#>)函数保存的绘图状态,不仅包括当前坐标系统的状态,还包括当前设置的填充风格,线条风格,阴影风格等各种绘图状态;但它不会保存当前绘制的图形。

坐标变换与路径结合使用

如果在坐标变换以后的坐标系统内创建路径,那么创建路径的每个点的坐标也是变换后 的结果。——整个路径都是基于”坐标变换”后的坐标系统。

使用矩阵变换

  1. CGContextConcatCTM(<#CGContextRef _Nullable c#>, <#CGAffineTransform transform#>)——使用 transform 变换矩阵对CGContextRef坐标系统进行变换,通过坐标矩阵可以对坐标系统任意变换。
  2. CGContextGetCTM(<#CGContextRef _Nullable c#>)——获取CGContextRef坐标系统的变换矩阵;
    矩阵变换这部分内容网络上没有发现比较系统的讲解。个人推荐使用《疯狂 ios 》中相应的章节学习。

控制绘图的叠加模式

可以调用Quartz 2D提供的方法:
CGContextSetBlendMode(<#CGContextRef _Nullable c#>, <#CGBlendMode mode#>)——设置该CGContextRef绘图环境的叠加模式;

处理填充

渐变填充

  1. CGContextDrawLinearGradient(<#CGContextRef _Nullable c#>, <#CGGradientRef _Nullable gradient#>, <#CGPoint startPoint#>, <#CGPoint endPoint#>, <#CGGradientDrawingOptions options#>)——设置渐变填充。Gradient,渐变对象;options支持kCGGradientDrawsAfterEndLocation(扩展填充起始点之前的区域)或kCGGradientDrawsBeforeStartLocation(扩展填充结束点之后的区域)
  2. CGContextDrawRadialGradient(<#CGContextRef _Nullable c#>, <#CGGradientRef _Nullable gradient#>, <#CGPoint startCenter#>, <#CGFloat startRadius#>, <#CGPoint endCenter#>, <#CGFloat endRadius#>, <#CGGradientDrawingOptions options#>)——圆形渐变填充。

上面的函数中都用到CGGradientRef参数,代表渐变颜色,为了获取CGGradientRef,可用如下函数:

CGGradientCreateWithColorComponents(<#CGColorSpaceRef _Nullable space#>, <#const CGFloat * _Nullable components#>, <#const CGFloat * _Nullable locations#>, <#size_t count#>)`
——space:指定该渐变的颜色空间;components,根据不同的颜色空间,设置多种颜色;locations:指定各颜色点的分布位置(如果为 NULL, 各颜色点均匀分布);count,颜色数量。

这里写图片描述

模式填充

类似于铺瓷砖的方式填充。
这里写图片描述
还可以在使用模式填充时,指定瓷砖块之间的距离;也可对填充的瓷砖块使用旋转,缩放,镜像等各种变换。

执行模式填充的2种方式:

  1. 使用CGColorCreateWithPattern(<#CGColorSpaceRef _Nullable space#>, <#CGPatternRef _Nullable pattern#>, <#const CGFloat * _Nullable components#>)函数创建代表模式填充的 CGColorRef(颜色),接下来使用该颜色填充指定区域或绘制边框;
  2. 先创建CGColorRef(模式填充的引用),然后在绘制时调用CGContextSetFillPattern函数或者CGContextStrokePath函数设置填充或者绘制边框的模式;

创建代表填充的颜色

CGColorRef代表一种具体的颜色,但此处它是一种特殊的颜色——代表模式填充的颜色。获取了这种颜色后,程序就可以使用它来填充区域,绘制路径。
这里写图片描述

使用 CGPatternRef设置模式填充

这里写图片描述

core image 滤镜

core image 可以用来开发移动版的 Photoshop.
core imaged的3个核心 API:
1. CIContext:——核心 API,所有的图片的处理都在它的管理下完成。
2. CIFiter:——代表过滤器。创建CIFiter时传入不同的参数即可创建不同类型的过滤器。
3. CIImage:——代表过滤器处理的图片。程序可以通过 UIImage,图片文件或像素数据来创建 CIImage.

在使用core image过滤器之前,一定要为项目增加core image框架。使用core image过滤的步骤如下:
这里写图片描述
这里写图片描述
这里写图片描述

补充学习资料:
1. iOS动效-利用CATransform3D实现翻页动画效果:http://www.jianshu.com/p/9cbf52eb39dd
2. http://blog.csdn.net/lvmaker/article/details/38385823

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值