【问题标题】:How to size UILabel that has been rotated如何调整已旋转的 UILabel 的大小
【发布时间】:2013-06-14 05:59:21
【问题描述】:

在 3D 空间中旋转 UILabel 后,它会被截断。我不知道为什么标签在旋转后会截断文本,因为最初,文本很合适。

之前

之后

这是我的轮换代码。注释掉代码时(sizeToFit 除外),一切正常。

CALayer *layer = label.layer;
CATransform3D rotationAndPerspectiveTransform = CATransform3DIdentity;
rotationAndPerspectiveTransform.m34 = 1.0 / -500;
rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, 45.0f * M_PI / 180.0f, 0.0f, 1.0f, 0.0f);
layer.transform = rotationAndPerspectiveTransform;

[label sizeToFit];

我可以在调用sizeToFit 后调整标签框架的大小,但我无法以编程方式确定正确的数字。在下面的代码中,我确定了文本的宽度并调整了标签框架的大小,但文本仍然被截断。

CGRect frame = label.frame;
frame.size.width = [label.text sizeWithFont:label.font].width;
label.frame = frame;

【问题讨论】:

  • 我敢打赌,应用到变换的透视图会截断它。完成图层转换后重置它。
  • @CodaFi 我没有关注。你能解释一下细节吗?谢谢。
  • 您看到如何应用 m34 透视变换了吗?完成图层转换后重置它。
  • @CodaFi 嗯...这没有做任何事情。
  • 实际上,我这么建议是愚蠢的,因为我应该看看你应用的角度。由于转换影响对象边界的方式,您都会以任何一种方式截断。我希望我在 Photoshop 方面做得更好,这样我就可以绘制一张图像,向您展示它是如何以平面方式布置的。只要不说你做什么就够了,除了操纵它的界限,会有所作为。

标签: iphone ios objective-c ipad uilabel


【解决方案1】:

由于 45 度 X 轴变换,该标签的大约一半现在在 Z 轴的负值部分被遮挡。对象的框架也被有效地切成两半,这迫使标签截断其文本。如果增加对象的框架,他们很快就会发现它没有任何效果。仅仅因为相对于它的超级视图的框架增加了,并不意味着标签变换坐标中的边界矩形已经更新。为此,我们分配了边界。要解决截断问题,请分配一个宽度约为当前标签边界宽度两倍的边界,这会强制渲染引擎将标签的“负 z 轴”部分视为可绘制。

(抱歉缺少图形,因为它真的很有帮助)

【讨论】:

    【解决方案2】:

    按比例增加It's Frame。它应该工作

    【讨论】:

    • 如何确定缩放框架的比例?
    • 基本上,当您旋转 90 角时,您的高度和宽度会在框架中互换。我不知道你旋转它的方式和角度。
    • 缩放框架是没有用的,因为它所做的只是将图层进一步推到负 z 坐标中。
    猜你喜欢
    • 2013-03-12
    • 2020-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多