本文共 3686 字,大约阅读时间需要 12 分钟。
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
{
//旋转
// 方法一: self.redLayer.transform = CATransform3DRotate(self.redLayer.transform, M_PI_4, 1, 1, 0);
// 方法二: self.redLayer.transform = CATransform3DMakeRotation(M_PI_4, 0, 0, 1);
//KVC
// 方法三: NSValue * value = [NSValue valueWithCATransform3D:CATransform3DRotate(self.redLayer.transform, M_PI_4, 100, 0, 0)];//(这个是quartzCore框架中的)
// // [self.redLayer setValue:value forKeyPath:@"transform"];
// 方法四:
[self.redLayersetValue:@(M_PI_4)forKeyPath:@"transform.rotation.x"];
//方法五:
self.view.transform=CGAffineTransformMakeRotation(M_PI_2);//旋转M_PI_2
self.view.transform=CGAffineTransformRotate(self.view.transform,M_PI_2);//在上次旋转的基础上,再旋转
}
- (void) test02
{
//缩放
//方法一: self.redLayer.transform = CATransform3DScale(self.redLayer.transform, 1, 1, 0.5);
// 方法二: self.redLayer.transform = CATransform3DMakeScale(0.5, 0.5, 1);(调用的是quartzCore框架中的方法)
//KVC
// 方法三: NSValue * value = [NSValue valueWithCATransform3D:CATransform3DScale(self.redLayer.transform, 0.5, 0.5, 1)];
[self.redLayer setValue:value forKeyPath:@"transform"];
//方法四:
[self.redLayersetValue:@0.5forKeyPath:@"transform.scale.x"];
//方法五:
// self.view.transform=CGAffineTransformMakeScale(3, 3);//宽高都放大3倍(这是coreGraphics中的框架,如果是view.transform就要调用coreGraphics这个框架里面的方法,如果layer.transform就要调用quartzCore中的方法)
self.view.transform=CGAffineTransformScale(self.view.transform,2, 3);//在上次缩放的基础上,再缩放
}
- (void) test01
{
//平移
//方法一: self.redLayer.transform = CATransform3DTranslate(self.redLayer.transform, 50, 0, 0);
// 方法二: self.redLayer.transform = CATransform3DMakeTranslation(50, 50, 0);
//KVC
// 方法三: NSValue * value = [NSValue valueWithCATransform3D:CATransform3DTranslate(self.redLayer.transform, 50, 50, 0)];
[self.redLayer setValue:value forKeyPath:@"transform"];
// 方法四: [self.redLayer setValue:@50 forKeyPath:@"transform.translation.y"];
//方法五:
// self.view.transform=CGAffineTransformMakeTranslation(20, 30);//x轴平移20,y轴平移30
self.view.transform=CGAffineTransformTranslate(self.view.transform,20, 30);//在上次平移的基础上,再平移
}
@end
平移 :①根据本身的transform进行平移 CGAffineTransformMakeTranslation(CGFloat tx,CGFloat ty)②根据本身的transform后者另外的transform进行平移CGAffineTransformTranslate(CGAffineTransform t,CGFloat tx,CGFloat ty)缩放 :①根据本身的transform进行缩放CGAffineTransformMakeScale(CGFloat sx,CGFloat sy)②根据本身的transform后者另外的transform进行缩放CGAffineTransformScale(CGAffineTransform t,CGFloat sx,CGFloat sy)旋转 :① 根据本身的transform进行旋转CGAffineTransformMakeRotation(CGFloat angle) (angle 旋转的角度)②根据本身的transform后者另外的transform进行旋转CGAffineTransformRotate(CGAffineTransform t,CGFloat angle)恢复 :反向旋转CGAffineTransformInvert(CGAffineTransform t)合并:CGAffineTransformConcat(CGAffineTransform t1,CGAffineTransform t2) 两个transform合并起来
两个view的transform的计算:
转载地址:http://selgi.baihongyu.com/