Core Graphics是Quartz 2D的一个高级绘图引擎,常用与iOS,tvOS,macOS的图形绘制应用开发。Core Graphics是对底层C语言的一个简单封装,其中提供大量的低层次,轻量级的2D渲染API。是基于CPU的框架,openGL、Metal都是基于GPU。
quartz
是一个通用的术语,用于描述在iOS
和MAC OS X
中整个媒体层用到的多种技术 包括图形、动画、音频、适配。Quart 2D
是一组二维绘图和渲染API
,Core Graphic
会使用到这组API
,Quartz Core
专指Core Animation
用到的动画相关的库、API
和类。CoreGraphics
是UIKit
下的主要绘图系统,频繁的用于绘制自定义视图。Core Graphics
是高度集成于UIView
和其他UIKit
部分的。Core Graphics
数据结构和函数可以通过前缀CG
来识别。
ios图像处理模块的经典原理配图如下:
#import "ViewController.h"
@interface ViewController ()
@property (nonatomic,weak) CALayer * redLayer;
@end
@implementation ViewController
- (void)viewDidLoad {
[superviewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
//手工创建
CALayer * redLayer = [CALayerlayer];
//设置背景颜色
redLayer.backgroundColor = [UIColorredColor].CGColor;
//位置和大小
redLayer.position =CGPointMake(100,100);
redLayer.bounds =CGRectMake(0,0, 100,100);
[self.view.layeraddSublayer:redLayer];
self.redLayer = redLayer;
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
//旋转
// 方法一&#xff1a; self.redLayer.transform &#61; CATransform3DRotate(self.redLayer.transform, M_PI_4, 1, 1, 0);
// 方法二&#xff1a; self.redLayer.transform &#61; CATransform3DMakeRotation(M_PI_4, 0, 0, 1);
//KVC
// 方法三&#xff1a; NSValue * value &#61; [NSValue valueWithCATransform3D:CATransform3DRotate(self.redLayer.transform, M_PI_4, 100, 0, 0)];//&#xff08;这个是quartzCore框架中的&#xff09;
// // [self.redLayer setValue:value forKeyPath:&#64;"transform"];
// 方法四&#xff1a;
[self.redLayersetValue:&#64;(M_PI_4)forKeyPath:&#64;"transform.rotation.x"];
//方法五&#xff1a;
self.view.transform&#61;CGAffineTransformMakeRotation(M_PI_2);//旋转M_PI_2
self.view.transform&#61;CGAffineTransformRotate(self.view.transform,M_PI_2);//在上次旋转的基础上&#xff0c;再旋转
}
- (void) test02
{
//缩放
//方法一&#xff1a; self.redLayer.transform &#61; CATransform3DScale(self.redLayer.transform, 1, 1, 0.5);
// 方法二&#xff1a; self.redLayer.transform &#61; CATransform3DMakeScale(0.5, 0.5, 1);&#xff08;调用的是quartzCore框架中的方法&#xff09;
//KVC
// 方法三&#xff1a; NSValue * value &#61; [NSValue valueWithCATransform3D:CATransform3DScale(self.redLayer.transform, 0.5, 0.5, 1)];
[self.redLayer setValue:value forKeyPath:&#64;"transform"];
//方法四&#xff1a;
[self.redLayersetValue:&#64;0.5forKeyPath:&#64;"transform.scale.x"];
//方法五&#xff1a;
// self.view.transform&#61;CGAffineTransformMakeScale(3, 3);//宽高都放大3倍&#xff08;这是coreGraphics中的框架&#xff0c;如果是view.transform就要调用coreGraphics这个框架里面的方法&#xff0c;如果layer.transform就要调用quartzCore中的方法&#xff09;
self.view.transform&#61;CGAffineTransformScale(self.view.transform,2, 3);//在上次缩放的基础上&#xff0c;再缩放
}
- (void) test01
{
//平移
//方法一&#xff1a; self.redLayer.transform &#61; CATransform3DTranslate(self.redLayer.transform, 50, 0, 0);
// 方法二&#xff1a; self.redLayer.transform &#61; CATransform3DMakeTranslation(50, 50, 0);
//KVC
// 方法三&#xff1a; NSValue * value &#61; [NSValue valueWithCATransform3D:CATransform3DTranslate(self.redLayer.transform, 50, 50, 0)];
[self.redLayer setValue:value forKeyPath:&#64;"transform"];
// 方法四&#xff1a; [self.redLayer setValue:&#64;50 forKeyPath:&#64;"transform.translation.y"];
//方法五&#xff1a;
// self.view.transform&#61;CGAffineTransformMakeTranslation(20, 30);//x轴平移20&#xff0c;y轴平移30
self.view.transform&#61;CGAffineTransformTranslate(self.view.transform,20, 30);//在上次平移的基础上&#xff0c;再平移
}
&#64;end
平移 &#xff1a;①根据本身的transform进行平移 CGAffineTransformMakeTranslation(CGFloat tx,CGFloat ty)
②根据本身的transform后者另外的transform进行平移CGAffineTransformTranslate(CGAffineTransform t,CGFloat tx,CGFloat ty)缩放 &#xff1a;①根据本身的transform进行缩放
CGAffineTransformMakeScale(CGFloat sx,CGFloat sy)
②根据本身的transform后者另外的transform进行缩放
CGAffineTransformScale(CGAffineTransform t,CGFloat sx,CGFloat sy)旋转 &#xff1a;① 根据本身的transform进行旋转
CGAffineTransformMakeRotation(CGFloat angle) &#xff08;angle 旋转的角度&#xff09;
②根据本身的transform后者另外的transform进行旋转
CGAffineTransformRotate(CGAffineTransform t,CGFloat angle)恢复 &#xff1a;反向旋转
CGAffineTransformInvert(CGAffineTransform t)合并&#xff1a;CGAffineTransformConcat(CGAffineTransform t1,CGAffineTransform t2)
两个transform合并起来
两个view的transform的计算&#xff1a;https://www.jianshu.com/p/e1fec2f92c63