iOS CALayer的transform属性(QuartzCore框架)和view的transform属性(CoreGraphics框架)

Core Graphics是Quartz 2D的一个高级绘图引擎,常用与iOS,tvOS,macOS的图形绘制应用开发。Core Graphics是对底层C语言的一个简单封装,其中提供大量的低层次,轻量级的2D渲染API。是基于CPU的框架,openGL、Metal都是基于GPU。

quartz是一个通用的术语,用于描述在iOSMAC OS X 中整个媒体层用到的多种技术 包括图形、动画、音频、适配。Quart 2D 是一组二维绘图和渲染APICore Graphic会使用到这组APIQuartz 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的计算:https://www.jianshu.com/p/e1fec2f92c63

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值