UILabel 重绘视图。如何避免这种行为?
UILabel redraws the view. How to avoid this behavior?
我有一个包含三个子视图的 viewController。
我还使用 AutoLayout 和大小 类。
这些视图是动画的并且会改变位置和大小。
在动画之后我更新了一个标签,但是整个视图都被重新绘制了,所以每个视图都处于它们的初始位置和大小。这不应该发生。
正如 Apple 开发人员参考中所说:
"The default content mode of the UILabel class is
UIViewContentModeRedraw. This mode causes the view to redraw its
contents every time its bounding rectangle changes. You can change
this mode by modifying the inherited contentMode property of the
class."
我似乎不清楚如何修改 -contentMode- 以更新该标签并离开视图-原样-。谁能给我一个线索?
提前致谢。
试试 contentMode = UIViewContentModeCenter。这应该可以防止您看到的重绘。虽然那可能不是你想要的 contentMode。
方案二是使用CATextLayer绘制标签。它会随着动画很好地调整大小,但设置起来要多得多。
听起来您可能正在使用自动布局来布置您的视图(例如,通过 IB 中的约束),但是您正在直接为您的动画操纵视图的 frame
s - 这是案件?如果是这样,您应该为约束的 constant
值设置动画,或者可能为子视图的 transform
设置动画。
如果您直接在使用自动布局的视图中操作框架,您的更改将在下次系统布置您的视图时被覆盖(例如,在标签的文本更改后)。
您有 3 个选项来解决您的问题 -
停止在 Storyboard/Xib 中使用 AutoLayout。
不是很好的解决方案
对子视图的 transform
属性 进行动画更改。例如myView.transform = CGAffineTransformMakeScale(2.0,2.0);
对于演示和解雇动画很有用,但是在 iOS 8.0
之前,混合使用 AutoLayout 和转换有一些问题
为您需要在动画中更改的约束添加 IBOutlets。动画更改这些约束的 constant
值。
最稳健的方法,但会导致复杂动画的大量属性和代码
我有一个包含三个子视图的 viewController。 我还使用 AutoLayout 和大小 类。 这些视图是动画的并且会改变位置和大小。 在动画之后我更新了一个标签,但是整个视图都被重新绘制了,所以每个视图都处于它们的初始位置和大小。这不应该发生。 正如 Apple 开发人员参考中所说:
"The default content mode of the UILabel class is UIViewContentModeRedraw. This mode causes the view to redraw its contents every time its bounding rectangle changes. You can change this mode by modifying the inherited contentMode property of the class."
我似乎不清楚如何修改 -contentMode- 以更新该标签并离开视图-原样-。谁能给我一个线索? 提前致谢。
试试 contentMode = UIViewContentModeCenter。这应该可以防止您看到的重绘。虽然那可能不是你想要的 contentMode。
方案二是使用CATextLayer绘制标签。它会随着动画很好地调整大小,但设置起来要多得多。
听起来您可能正在使用自动布局来布置您的视图(例如,通过 IB 中的约束),但是您正在直接为您的动画操纵视图的 frame
s - 这是案件?如果是这样,您应该为约束的 constant
值设置动画,或者可能为子视图的 transform
设置动画。
如果您直接在使用自动布局的视图中操作框架,您的更改将在下次系统布置您的视图时被覆盖(例如,在标签的文本更改后)。
您有 3 个选项来解决您的问题 -
停止在 Storyboard/Xib 中使用 AutoLayout。
不是很好的解决方案
对子视图的
transform
属性 进行动画更改。例如myView.transform = CGAffineTransformMakeScale(2.0,2.0);
对于演示和解雇动画很有用,但是在 iOS 8.0
之前,混合使用 AutoLayout 和转换有一些问题
为您需要在动画中更改的约束添加 IBOutlets。动画更改这些约束的
constant
值。最稳健的方法,但会导致复杂动画的大量属性和代码