objective-c – 为什么在更改其anchorPoint之后设置框架时,我的视图会移动?

前端之家收集整理的这篇文章主要介绍了objective-c – 为什么在更改其anchorPoint之后设置框架时,我的视图会移动?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我做了两个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.

原文链接:https://www.f2er.com/c/113645.html

猜你在找的C&C++相关文章