首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >ios-anchorPoint、position理解[通俗易懂]

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

作者头像
全栈程序员站长
发布2022-11-09 09:51:52
发布2022-11-09 09:51:52
1.3K0
举报

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

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

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

代码语言:javascript
复制
    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视图的问题

代码语言:javascript
复制
    //锚点改成(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中的坐标点,计算方式如下:

代码语言:javascript
复制
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°得到下图(由于此时锚点为左上角的点,所以围绕左上角旋转):

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

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年10月8日 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档