S.J*_*Lim 10 objective-c uikit ios
我做了两个实例UILabel并将它们添加到我ViewController看来.然后我将anchorPoint每个从0.5改为1.0(x和y).
接下来,我将帧重置uiLabel2为其创建的帧:(100,100,100,20).
当我运行应用程序,uiLabel1并uiLabel2显示在不同的位置.为什么?
UILabel *uiLabel1 = [[[UILabel alloc] initWithFrame:CGRectMake(100, 100, 100, 20)] autorelease];
uiLabel1.text = @"UILabel1";
uiLabel1.layer.anchorPoint = CGPointMake(1, 1);
UILabel *uiLabel2 = [[[UILabel alloc] initWithFrame:CGRectMake(100, 100, 100, 20)] autorelease];
uiLabel2.text = @"UILabel2";
uiLabel2.layer.anchorPoint = CGPointMake(1, 1);
uiLabel2.frame = CGRectMake(100, 100, 100, 20);
[self.view addSubview:uiLabel1];
[self.view addSubview:uiLabel2];
Run Code Online (Sandbox Code Playgroud)

rob*_*off 44
A CALayer有四个属性可确定它在超级图层中的显示位置:
position(与视图的center属性相同)bounds(实际上只是size部分bounds)anchorPointtransform你会发现,frame是不是那些属性之一.该frame属性实际上来自这些属性.当您设置的frame属性,该层实际上改变了center,并bounds.size根据您提供的框架和层的现有上anchorPoint.
你创建了第一层(通过创建第一层UILabel,它是一个子类UIView,每个UIView都有一个层),给它一个100,100,100,20的框架.该图层的默认锚点为0.5,0.5.因此它计算其边界为0,0,100,20,其位置为150,110.它看起来像这样:

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

如果你现在要求图层(或视图)的框架,你将获得50,90,100,20.
当您创建第二层(对于第二层UILabel)时,在更改其锚点后,您可以设置其框架.因此,图层会根据您提供的帧及其现有锚点计算新位置和边界:

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