ios-anchorPoint、position理解[通俗易懂]

ios-anchorPoint、position理解[通俗易懂]anchorPoint(锚点)是layer的一个属性,下面我们来看看其对view的影响,本文主要通过图片方式展现:锚点用单位坐标来描述也就是图层的相对坐标。在苹果文档中说明左下是(0,0),右上是(1,1),经过试验这个是错的,实际上:图层左上角是{0,0},右下角是{1,1},取值范围不限。单位坐标的意思是指以视图长款为单位来计算,坐标系展示如下:默认一个视图的锚

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

anchorPoint(锚点)是layer的一个属性,下面我们来看看其对view的影响,本文主要通过图片方式展现:

锚点用单位坐标来描述也就是图层的相对坐标。在苹果文档中说明左下是(0,0),右上是(1,1),mac系统是这样,实际上:ios开发中图层左上角是{0, 0},右下角是{1, 1},取值范围不限。单位坐标的意思是指以视图长宽为单位来计算,坐标系展示如下:

ios-anchorPoint、position理解[通俗易懂]

默认一个视图的锚点在(0.5,0.5)的位置,这也是我们使用transform属性时为什么会围绕视图中心点旋转的原因,下面我们将一个默认视图锚点改成(0,0):

    UIView *allView1 = [[UIView alloc]initWithFrame:CGRectMake(100, 100, leftW, topH)];
    allView1.backgroundColor = [UIColor orangeColor];
    allView1.layer.anchorPoint = CGPointMake(0,0);
    [self.view addSubview:allView1];

红色为原始视图,橘色为修改(0,0)锚点的视图,线单位宽度都是100:

橘色视图的origin由(100,100)->(100+50,100+25),朝右下移动了1/2视图的位置,同理(1,1)朝左上移动1/2视图的问题


ios-anchorPoint、position理解[通俗易懂]

    //锚点改成(0,0)后新位置计算方法
    CGPoint newOrigin;
    CGRect oldFrame = allView.frame;
    newOrigin.x = oldFrame.origin.x + oldFrame.size.width/2;
    newOrigin.y = oldFrame.origin.y + oldFrame.size.height/2;
    CGRect newFrame = allView1.frame;
    newFrame.origin = newOrigin;
    allView1.frame = newFrame;

由打印信息得出position为anchorPoint在superLayer中的坐标点,计算方式如下:

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


当设置视图的frame属性,position点的位置(也就是position坐标)根据锚点(anchorPoint)的值来确定,而当设置图层的position属性的时候,bounds的位置(也就是frame的orgin坐标)会根据锚点(anchorPoint)来确定。

说起来比较复杂,实际上运行一下项目就知道了

这时候设置橘色视图逆时针旋转90°得到下图(由于此时锚点为左上角的点,所以围绕左上角旋转):


ios-anchorPoint、position理解[通俗易懂]


有时候有需求改变锚点但是要求frame不变,在改变锚点之后重新设置一下frame就可以了,如果还有不明白的直接下载测试工程


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/184688.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • jquery 中append追加不能写if等逻辑语句及table列合并问题

    jquery 中append追加不能写if等逻辑语句及table列合并问题

    2021年7月15日
  • 用CA给证书签名「建议收藏」

    用CA给证书签名「建议收藏」本文原创自http://blog.csdn.net/voipmaker 转载注明出处。本系列文章分为三篇,主要介绍构建自己的证书颁发服务,生成证书请求,以及通过自己构建的CA给生成的证书请求签名并最终应用到服务。本文是最后一篇,结合前面的两篇文章,可以通过自己构建的CA给自己的应用签名。本文假设你已经参照签名两篇文章流程,CA key在目录 /home/cg/myc

    2022年6月3日
  • 中国程序员和外国程序员哪个厉害_中国十大程序员

    中国程序员和外国程序员哪个厉害_中国十大程序员作者:金戈大王别被标题误导,我可没有说中国程序员不如外国程序员。听说世界一流程序员都上一个论坛,叫stackoverflow,那天闲来无事,索性上去看看。不得了,发现一个热门问题stackoverflow中的一个提问乖乖,这哥们难道没学过编程,返回值跟声明不一样他都看不出来?看来stackoverflow的程序员水平不过如此啊,哈哈哈哈。一阵

    2022年10月11日
  • adb安装以及调试

    adb安装以及调试想必很多程序猿们都经历过一个头疼的事情是开发完一个项目之后,在你本机模拟是Ok的,但是到了正式环境上(机顶盒、手机等)却又bug百出,测试姐姐找的你头疼。那么我们就需要在自测的时候验证一下。废话不多说先来直接上正文:1.下载安装ADB下载安装非常快速简单,不到3MB。(需要下载的可以直接找我要)下载解压完之后不需要你去安装或者配置什么Path之类的东西,只需要记住你放在哪儿了就好。例如我放在了D盘,文件名叫ADB。2.是否正常运行输入:(1)win+R(2)进入cmd(3)D:(4)c

    2022年5月16日
  • CF B. Kolya and Tandem Repeat

    CF B. Kolya and Tandem Repeat

    2022年2月5日
  • 【目标检测】Labelme的改进——海量图片的自动标注「建议收藏」

    【目标检测】Labelme的改进——海量图片的自动标注「建议收藏」  深度学习一般需要对大量的图片进行标注,但是手动标注耗时耗力,所以模仿labelme软件的功能,使用程序对大批量的图片进行自动标注,大大减少手动操作。下面介绍如何实现对大批量的图片进行标注。自动标注的程序实现:https://github.com/shuyucool/Labelme.git程序内容均为原创,如果使用麻烦您点赞呀如遇疑问,欢迎随时交流,定尽量解答。联系方式:7819…

    2022年9月11日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号