gpt4 book ai didi

ios - UILabel 的框架如何在更改 anchor 时发生变化

转载 作者:行者123 更新时间:2023-12-01 18:14:30 25 4
gpt4 key购买 nike

我有一个带有框架的 UIView 对象 (50, 50, 100, 100) .
在这个 View 对象上,我添加了一个带有框架的标签 (50, 50, 50, 10)然后我正在更改 anchor from default (0.5, 0.5) to (1.0, 0.5)但令人惊讶的是,框架在那之后发生了变化。下面是相同的代码片段

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(rect.origin.x, rect.origin.y, rect.size.width/2, 10)];
NSLog(@"Label frame for %d label before anchor point shift is %@", i, NSStringFromCGRect(label.frame));

label.layer.anchorPoint = CGPointMake(1.0, 0.5);
NSLog(@"Label frame for %d label after anchor point shift is %@", i, NSStringFromCGRect(label.frame));

给出输出:
anchor 移位前 0 标签的标签框为 {{50, 50}, {50, 10}}
anchor 移位后 0 标签的标签框为 {{25, 50}, {50, 10}}

最佳答案

一个 CALayer 有四个属性来决定它出现在它的超层中的什么位置:
位置(与 View 的中心属性相同)
bounds(实际上只是bounds的大小部分)
anchor
转换
您会注意到 frame 不是这些属性之一。 frame 属性实际上是从这些属性派生的。当您设置 frame 属性时,图层实际上会根据您提供的框架和图层的现有 anchor 更改其中心和 bounds.size。

你创建第一层(通过创建第一个 UILabel,它是 UIView 的子类,每个 UIView 都有一个层),给它一个 50,50,50,10 的帧。该图层的默认 anchor 为 0.5,0.5。因此,它将其边界计算为 0,0,50,10,并将其位置计算为 75,55。

默认情况下, anchor 和位置是重合的。
如果我们将 anchorPoint 更改为 1,0.5 ,它将更改位置,因此中心也会更改为 100,55 。但它不是移动中心/位置,而是移动标签的框架。所以如果我们想要 75,55 作为 1,1 处的新 anchor ,我们将不得不将框架移动 -25,0 (75,55 - 100,55)。因此框架从控制台输出给出的改变。
anchor 移位前 0 标签的标签框为 {{50, 50}, {50, 10}}
anchor 移位后 0 标签的标签框为 {{25, 50}, {50, 10}}

关于ios - UILabel 的框架如何在更改 anchor 时发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23794801/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com