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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • golang map 有序_有序化最重要的手法是

    golang map 有序_有序化最重要的手法是要使得Map有序化,我们必须要对map的key进行排序,我们可以使用sort.Strings函数对字符串进行排序。packagemainimport( "fmt" "sort")funcmain(){ slice1:=map[string]int{ "wangxiaoming":12, "liming":11, "fenglingling"…

    2022年9月16日
    2
  • 概率矩阵分解模型 PMF[通俗易懂]

    概率矩阵分解模型 PMF[通俗易懂]本文是论文《一种结合推荐对象间关联关系的社会化推荐算法》的笔记(上)。因为对其中的概率矩阵分解(ProbabilisticMatrixFactorization,PMF)不够了解,因而我先去脑补了PMF在推荐系统中的应用,然后再对论文进行总结。主要内容包括svd的两种形式和PMF的介绍。

    2022年6月18日
    61
  • python面向对象编程指南 pdf_python面向对象的三个基本特征

    python面向对象编程指南 pdf_python面向对象的三个基本特征虽然Python是解释性语言,但是它是面向对象的,能够进行对象编程。下面就来了解一下如何在Python中进行对象编程。一.如何定义一个类  在进行python面向对象编程之前,先来了解几个术语:类,类对象,实例对象,属性,函数和方法。  类是对现实世界中一些事物的封装,定义一个类可以采用下面的方式来定义:

    2025年6月24日
    3
  • Navicat:Access violation at address xxxxxxxxx in module ‘navicat.exe‘.Read of address xxxxxx

    Navicat:Access violation at address xxxxxxxxx in module ‘navicat.exe‘.Read of address xxxxxxNavicat:Accessviolationataddressxxxxxxxxxinmodule’navicat.exe’.Readofaddressxxxxxx在navicat中如果报了这个错误,则表示内存越界,需要重新注册windows的动态链接库;解决方案:打开cmd;在命令行中输入for%1in(%windir%\system32\*.dll)doregsvr32.exe/s%1回车运行;等待动态链接库刷新完成,重启mysql和navi.

    2022年8月22日
    43
  • xgboost算法原理简介_量子优化算法

    xgboost算法原理简介_量子优化算法1、xgboost是什么全称:eXtremeGradientBoosting作者:陈天奇(华盛顿大学博士)基础:GBDT所属:boosting迭代型、树类算法。适用范围:分类、回归优点:速度快、效果好、能处理大规模数据、支持多种语言、支持自定义损失函数等等。缺点:发布时间短(2014),工业领域应用较少,待检验2、基础知识,GBDTxgboost

    2022年4月20日
    59
  • java解析url的链接和参数_java根据url下载图片

    java解析url的链接和参数_java根据url下载图片方法一Blob和FileReader对象实现原理:使用xhr请求图片,并设置返回的文件类型为Blob对象[xhr.responseType=“blob”],使用FileReader对象接收blob。getBase64(“https://fastmarket.oss-cn-shenzhen.aliyuncs.com/oss/static/other/1/images/baseMap_index.jpg”)//链接是你的网络图片functiongetBase64(imgUrl){

    2022年9月2日
    2

发表回复

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

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