博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS开发19-iOS CALayer的position和anchorPoint
阅读量:3531 次
发布时间:2019-05-20

本文共 1567 字,大约阅读时间需要 5 分钟。

iOS开发19-iOS CALayer的position和anchorPoint

首先看几个概念:

frame:      该view在父view坐标系统中的位置和大小。(参照点是,父亲的坐标系统)
bounds:该view在本地坐标系统中的位置和大小。(参照点是,本地坐标系统,就相当于View自己的坐标系统,以0,0点为起点)

center:  该view的中心点在父view坐标系统中的位置和大小。(参照点是,父亲的坐标系统)

position就是anchorPoint在superLayer中的位置

把一张白纸用图钉订在书桌上,白纸可以旋转,这个图钉就是锚点。

图形围着锚点进行旋转缩放等。

锚点的位置在白纸上的坐标:

左上角,anchorPoint(0,0);右上角,anchorPoint(1,0);

中心点,anchorPoint(0.5,0.5);

左下角,anchorPoint(0,1);右下角,anchorPoint(1,1);

如图所示:

position和anchorPoint的关系

position.x = frame.origin.x + anchorPoint.x * bounds.size.width;  
position.y = frame.origin.y + anchorPoint.y * bounds.size.height;
frame.origin.x = position.x - anchorPoint.x * bounds.size.width;  
frame.origin.y = position.y - anchorPoint.y * bounds.size.height;

修改layer的position位置或者修改anchorPoint受影响的只会是frame.origin,也就是layer坐标原点相对superLayer会有所改变。

换句话说,frame.origin由position和anchorPoint共同决定

更改锚点,但是不更改Frame

如果需要修改anchorPoint,但又不想要移动layer也就是不想修改frame.origin,此时就要:

第一种方法:

position新位置 = position旧位置 + (anchorPoint新位置 - anchorPoint旧位置)  * bounds.size.width  

第二种方法:

有个更方便的方法。修改anchorPoint后再重新设置一遍frame就可以,position就会自动进行相应的改变。

  CGRect oldFrame = 旧的frame;//存储旧的frame
  view.layer.anchorPoint = 新的anchorpoint;//更新anchorpoint
  view.frame = oldFrame;//将frame改成旧的frame,此时position会根据frame和锚点来进行更新

1、position是layer中的anchorPoint在superLayer中的位置坐标。 
2、互不影响原则:单独修改position与anchorPoint中任何一个属性都不影响另一个属性。 
3、frame、position与anchorPoint有以下关系:
frame.origin.x = position.x - anchorPoint.x * bounds.size.width;  

frame.origin.y = position.y - anchorPoint.y * bounds.size.height;

著作权声明:本文由http://my.csdn.net/Nathan1987_原创,欢迎转载分享。请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢

你可能感兴趣的文章
前端网页学习8(css三大特性:层叠性,继承性,优先级)
查看>>
前端网页学习9(css盒子)
查看>>
python学习8(列表)
查看>>
JavaScript学习(new1)
查看>>
http GET 和 POST 请求的优缺点、区别以及误区
查看>>
JVM的4种垃圾回收算法、垃圾回收机制
查看>>
什么是分布式事务
查看>>
常用的分布式事务解决方案
查看>>
设计模式:单例模式 (关于饿汉式和懒汉式)
查看>>
一致性Hash算法
查看>>
更新Navicat Premium 后打开数据库出现1146 - Table 'performance_schema.session_variables' doesn't exist
查看>>
安装rabbitmq时踩的坑
查看>>
2021-06-09数据库添加多条数据
查看>>
简单的JAVA小作品
查看>>
一些方便的遍历方法
查看>>
CMake下载
查看>>
未调用fflush产生的图片文件无法打开问题
查看>>
SQL 约束(二)
查看>>
SQL ALTER用法(三)
查看>>
SQL where子句及查询条件语句(六)
查看>>