加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – 为什么在更改其anchorPoint之后设置框架时,我的

发布时间:2020-12-16 05:49:06 所属栏目:百科 来源:网络整理
导读:我做了两个UILabel实例,并将它们添加到ViewController的视图中. 然后我将每个的anchorPoint从0.5改为1.0(x和y). 接下来,我将uiLabel2的框架重设为我创建的框架:(100,100,20). 当我运行应用程序时,uiLabel1和uiLabel2显示在不同的位置.为什么? UILabel *uiL
我做了两个UILabel实例,并将它们添加到ViewController的视图中.
然后我将每个的anchorPoint从0.5改为1.0(x和y).

接下来,我将uiLabel2的框架重设为我创建的框架:(100,100,20).

当我运行应用程序时,uiLabel1和uiLabel2显示在不同的位置.为什么?

UILabel *uiLabel1 = [[[UILabel alloc] initWithFrame:CGRectMake(100,20)] autorelease];
uiLabel1.text = @"UILabel1";
uiLabel1.layer.anchorPoint = CGPointMake(1,1);

UILabel *uiLabel2 = [[[UILabel alloc] initWithFrame:CGRectMake(100,20)] autorelease];
uiLabel2.text = @"UILabel2";
uiLabel2.layer.anchorPoint = CGPointMake(1,1);
uiLabel2.frame = CGRectMake(100,20);

[self.view addSubview:uiLabel1];
[self.view addSubview:uiLabel2];

解决方法

CALayer有四个属性可以确定它在其上层显示的位置:

>位置(与视图的中心属性相同)
>界限(实际上只是边界的大小部分)
> anchorPoint
>变换

你会注意到框架不是这些属性之一. frame属性实际上是从这些属性派生出来的.当您设置frame属性时,图层实际上会根据您提供的框架和图层现有的anchorPoint来更改其中心和bounds.size.

您创建第一层(通过创建第一个UILabel,它是UIView的子类,每个UIView都有一个层),给它一个100,20的框架.该层的默认锚点为0.5,0.5.所以它的边界计算为0,20,其位置为150,110.看起来像这样:

然后将其锚点改为1,1.由于您不直接更改图层的位置或边界,并且不通过设置其框架间接更改图层,因此图层将移动,以使其新的锚点位于其上层的(未更改)位置:

如果您现在要求图层(或视图)框架,您将获得50,90,20.

创建第二层(对于第二个UILabel),在更改其锚点后,设置其框架.因此,层根据您提供的框架及其现有的锚点计算新位置和边界:

如果您现在询问图层(或视图)的框架,您将获得您设置的框架,即100,20.但如果您要求其位置(或视图的中心),您将获得200,120.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读