XZ_iOS核心动画高级技巧之坐标系和坐标系的转换_Understand_XZ的博客-程序员宝宝

技术标签: 视图坐标系  视图的坐标系转换方法  iOS  坐标系转换  

坐标系

    视图视图树当中也是相对于父视图按层级关系放置,一个视图的position依赖于它父视图的bounds,如果父视图发生了移动,它的所有子视图也会跟着移动。

    这样对于放置视图会更加方便,因为你可以通过移动根视图来将它的子视图作为一个整体来移动,但是,有时候你需要知道一个视图的绝对位置,或是相对于另一个视图的位置,而不是它当前父视图的位置。

视图的坐标系转换方法

- (NSPoint)convertPoint:(NSPoint)point toView:(NSView *)view;

- (CGPoint)convertPoint:(CGPoint)point fromView:(UIView *)view;

- (CGRect)convertRect:(CGRect)rect toView:(UIView *)view;

- (CGRect)convertRect:(CGRect)rect fromView:(UIView *)view;
这些方法可以把定义在一个图层坐标系下的点或者矩形转换成另一个图层坐标系下的点或者矩形。

实例

默认情况下,frame是以父控件左上角为坐标原点;

转换坐标系 : 可以转换坐标系原点 , 改变 frame 的参照点

// 蓝色

UIView *blue = [[UIViewalloc]init];

blue.backgroundColor = [UIColorblueColor];

blue.frame = CGRectMake(0,50,100,100);

[self.viewaddSubview:blue];

// 红色

UIView *red = [[UIViewalloc]init];

red.backgroundColor = [UIColorredColor];

red.frame = CGRectMake(100,150,100,100);

[self.viewaddSubview:red];

// 计算self.red在其他控件中的位置和尺寸

CGRect newRect = [red convertRect:CGRectMake(50,50,50,50) toView:blue];

// 以字符串的形式打印转换完的坐标

NSLog(@"%@",NSStringFromCGRect(newRect));

结果打印:



CGRect newFrame = [from convertRect :from. bounds  toView :window];
等价于 
CGRect newFrame = [from.superview convertRect:from.frame toView:window];
等价于:toView写成nil(空)就是window
CGRect newFrame = [from convertRect :from. bounds toView :window];
self . containerView . CGRectGetMaxY (newFrame);
self . containerView . centerX  CGRectGetMidX (newFrame);
原理:左边的from和右 边的windows相差多少,from的bounds就加上多少
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/understand_XZ/article/details/51930955

智能推荐

nabc模型_我的ideas之网络安全——基于NABC模型_weixin_39837352的博客-程序员宝宝

现在,网络聊天工具越来越多,但是QQ还仍未被别的聊天软件所代替,不能说百分百的人都有QQ,那至少也应该现有百分之九十无的人在用QQ。随之而来的确实这便捷沟通背后的安全隐患,一些人就趁机而入,来谋划网络诈骗,所以网络安全也越来越受网民的关注。由于总是遇到同学的QQ被盗发布不良信息的情况,我的ideas是做一个软件来根据发布的信息来确定QQ是否被盗。根据NABC模型,具体如下:1、我的这个想法可以...

嵌入式项目管理_小学徒666的博客-程序员宝宝_嵌入式项目管理

嵌入式系统开发项目管理项目生命周期五大阶段1、项目启动阶段(1)项目可行性分析一个成功的产品,应该从以下3个方面来观察评估:设计产品:商业行为产品设计前,要做好市场调查和评估,要考虑产品的时效性、市场需求和技术可行性;产品设计结束后要写下详细的产品规格(技术层次、人力资源、开发费用、产品成本)尽量避免中途更改产品规格;凡事以最终用户需求或体验为准。管理项目:管理行为项目经理必须清楚了解其任务事在规定的期限内完成质量可接受的产品开发,在此前提下必须衡量人力及其它相关资源,只

CDH6.3.2安装包申请链接及组件版本_ClouderaHadoop的博客-程序员宝宝

cdh6.3.2组件名称 版本Supervisord 3Cloudera Manager Agent 6.3.1Cloudera Manager Management Daemon 6.3.1Flume NG 1.9.0+cdh6.3.2Hadoop 3.0.0+cdh6.3.2HDFS 3.0.0+cdh6.3.2HttpFS 3.0.0+cdh6.3.2hadoop-kms 3.0.0+cdh6.3.2MapReduce 2 3.0.0+cdh6.3.2YARN 3.0.0+cdh6

SAP Infotypes_daxi9653的博客-程序员宝宝

4.1 ... Personnel Administration ... 79... Infotype 0000—Actions ... 80... Infotype 0001—Organizational Assignment ... 82... Infotype 0002—Personal Data ... 83... Infotype 0003—Payroll ...

码农常用10种算法_捕翼的博客-程序员宝宝

码农常用10种算法二分查找算法(非递归)查看前面笔记:查找算法中的非递归二分查找分治算法分治算法介绍分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)……分治算法可以求解的一些经典问题二分搜索大整数乘法棋盘覆盖合并排序快速排序线性时间选择

【Redis系列7】Redis高级特性之发布/订阅和Lua脚本执行原理分析_双子孤狼的博客-程序员宝宝

Redis高级特性之发布/订阅和Lua脚本执行原理分析前言发布与订阅基于频道的实现实现原理分析基于模式的实现实现原理分析Lua脚本Lua脚本的调用Lua脚本中执行Redis命令Lua脚本摘要Lua脚本文件脚本异常脚本超时脚本陷入死循环为什么可以执行script kill命令总结前言Redis当中除了之前介绍的事务,持久化等高级特性之外,还提供了发布与订阅,Lua脚本,事件机制等高级特性,本文会继续介绍Redis的另外两大高级特性:发布与订阅和Lua脚本。发布与订阅理论上来说通过双端链表就可以实现发布

随便推点

ansible常用的模块解释及用法_烧开的热水壶的博客-程序员宝宝

模块是Ansible执行的最小单位,可以是由Python编写,也可以是Shell编写,也可以是由其他语言编写。一、ping模块测试连接可通性,没有参数。通的话返回pong。1、使用示例ansible all -m ping 可通,返回pong如下图不通,返回如下图二、setup模块主要用于获取主机信息,在playbooks里经常会用到的一个参数gather_facts就与该模...

Git rebase命令实战_aipiannian6725的博客-程序员宝宝

一、前言  一句话,git rebase 可以帮助项目中的提交历史干净整洁!!!二、避免合并出现分叉现象git merge操作  1、新建一个 develop 分支    2、在develop分支上新建两个文件    3、然后分别执行 add、commit、push    4、接着切换到master分支  分别添加c.txt 和 d.tx...

NIO中的SelectionKey_慢行慢行的博客-程序员宝宝_selectionkey

转载自: 秦汉邮侠 https://www.jianshu.com/p/d33f2f6cdba0要点是一个抽象类,表示selectableChannel在Selector中注册的标识.每个Channel向Selector注册时,都将会创建一个selectionKey选择键将Channel与Selector建立了关系,并维护了channel事件.可以通过cancel方法取消键,取消的键不会...

C++_2019-04-28_机器视觉——Opencv——基于轮廓匹配_智能之心的博客-程序员宝宝_c++ opencv检测轮廓

/*Hu轮廓匹配:#include "Opencv_MatchShape.h"#include "Match_Shape_NCC.h"int main(int argc, char* argv){Opencv_MatchShape demo;demo.MatchShape_HU();system("pause");return 0;}*/#include <i...

刚刚!字节跳动发布了600+前端岗位,平均薪资40K!_frontend_frank的博客-程序员宝宝

不愧是字节!5月官方又发布了600+前端工程师岗位!来源:字节跳动招聘官网那么本批有哪些优质岗位可选择?薪资待遇如何?下面给大家列出几类具体的岗位及要求,同时分享一份由字节3-1 面试官整...

推荐文章

热门文章

相关标签