热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

CoreGraphics是Quartz2D的一个高级绘图引擎,常用与iOS,tvOS,macOS的图形绘制应用开发。CoreGraphic

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

quartz是一个通用的术语,用于描述在iOSMAC 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


推荐阅读
  • 本文详细介绍了如何在 Ubuntu 14.04 系统上搭建仅使用 CPU 的 Caffe 深度学习框架,包括环境准备、依赖安装及编译过程。 ... [详细]
  • 本文探讨了如何使用Scrapy框架构建高效的数据采集系统,以及如何通过异步处理技术提升数据存储的效率。同时,文章还介绍了针对不同网站采用的不同采集策略。 ... [详细]
  • 汇总了2023年7月7日最新的网络安全新闻和技术更新,包括最新的漏洞披露、工具发布及安全事件。 ... [详细]
  • HDU 2537 键盘输入处理
    题目描述了一个名叫Pirates的男孩想要开发一款键盘输入软件,遇到了大小写字母判断的问题。本文提供了该问题的解决方案及实现方法。 ... [详细]
  • 2023年1月28日网络安全热点
    涵盖最新的网络安全动态,包括OpenSSH和WordPress的安全更新、VirtualBox提权漏洞、以及谷歌推出的新证书验证机制等内容。 ... [详细]
  • 在CentOS 7中部署Nginx并配置SSL证书
    本文详细介绍了如何在CentOS 7操作系统上安装Nginx服务器,并配置SSL证书以增强网站的安全性。适合初学者和中级用户参考。 ... [详细]
  • 本文详细介绍了如何在PyQt5中创建简易对话框,包括对话框的基本结构、布局管理以及源代码实现。通过实例代码,展示了如何设置窗口部件、布局方式及对话框的基本操作。 ... [详细]
  • 本文介绍了使用Python和C语言编写程序来计算一个给定数值的平方根的方法。通过迭代算法,我们能够精确地得到所需的结果。 ... [详细]
  • 本文探讨了Linux环境下线程私有数据(Thread-Specific Data, TSD)的概念及其重要性,介绍了如何通过TSD技术避免多线程间全局变量冲突的问题,并提供了具体的实现方法和示例代码。 ... [详细]
  • 使用Python构建网页版图像编辑器
    本文详细介绍了一款基于Python开发的网页版图像编辑工具,具备多种图像处理功能,如黑白转换、铅笔素描效果等。 ... [详细]
  • SSE图像算法优化系列三:超高速导向滤波实现过程纪要(欢迎挑战)
    自从何凯明提出导向滤波后,因为其算法的简单性和有效性,该算法得到了广泛的应用,以至于新版的matlab都将其作为标准自带的函数之一了&#x ... [详细]
  • 视觉Transformer综述
    本文综述了视觉Transformer在计算机视觉领域的应用,从原始Transformer出发,详细介绍了其在图像分类、目标检测和图像分割等任务中的最新进展。文章不仅涵盖了基础的Transformer架构,还深入探讨了各类增强版Transformer模型的设计思路和技术细节。 ... [详细]
  • 服务器虚拟化存储设计,完美规划储存与资源,部署高性能虚拟化桌面
    规划部署虚拟桌面环境前,必须先估算目前所使用实体桌面环境的工作负载与IOPS性能,并慎选储存设备。唯有谨慎估算贴近实际的IOPS性能,才能 ... [详细]
  • 本文深入探讨了Linux内核中进程地址空间的设计与实现,包括虚拟地址空间的概念、内存描述符`mm_struct`的作用、内核线程与用户进程的区别、进程地址空间的分配方法、虚拟内存区域(VMA)的结构以及地址空间与页表之间的映射机制。 ... [详细]
  • 本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ... [详细]
author-avatar
苏黎世的风景
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有