8

在显示文本块的应用程序中,当设备转向横向时,我的字体大小会增加。我不喜欢它是如何完成整个动画然后突然跳到新尺寸的,所以我想在旋转过程中对尺寸变化进行动画处理。

我在某处读到,在UIView动画块中进行此更改不起作用,因为字体属性不可动画,那么我有什么选择呢?

对于我的具体实现,我不是简单地按原样缩放UILabel/ ;UITextView框的边界比字体大小增加更多(按比例),因此文本中将重新流动。那个我能接受。

编辑:我可以简单地缩放UITextView.

另外,我正在考虑手动“动画”它:我有一种方法可以布置我的视图并调整字体大小。如果我知道旋转何时开始以及动画的持续时间,我可以对其进行计时,以便在动画中间呈现一两个中间字体大小。任何有关获得这些的帮助将不胜感激。

4

4 回答 4

6

一种选择是淡出旧文本,更改字体大小,然后将其淡入。字体属性可能不是可动画的,但 alpha 是。由于 alpha 是 UIView 的一个属性,因此您可以以相同的方式处理所有包含文本的视图:UILabel、UITextView 等。它看起来也不错。

于 2011-03-15T18:22:25.413 回答
6

如果我知道旋转何时开始,以及动画的持续时间......

有趣的是你应该提到这一点。就在动画开始之前,您的视图控制器将收到一条willAnimateRotationToInterfaceOrientation:duration:消息,为您提供所需的确切信息。

于 2011-03-17T11:37:31.830 回答
4

一种方法可以是:

  1. 创建一个 CAKeyframeAnimation
  2. 使用一组 CATransform3D 对象定义您希望在该动画期间实现的缩放和旋转
  3. 将这些变换添加到您的关键帧动画
  4. addAnimation消息发送到您的标签层对象:[[label layer] addAnimation]

这将是一个代码示例,假设yourLabelUILabel要缩放和旋转:

CAKeyframeAnimation *scale = [CAKeyframeAnimation animationWithKeyPath:@"transform"];

CATransform3D scaleUp = CATransform3DMakeScale(1.5, 1.5, 1); // Scale in x and y
CATransform3D rotationScaled = CATransform3DRotate (scaleUp, 90, 0, 0, 1); // Rotate the scaled font

[scale setValues:[NSArray arrayWithObjects:
[NSValue valueWithCATransform3D:CATransform3DIdentity],
[NSValue valueWithCATransform3D:rotationScaled],
nil]];

// set the duration
[scale setDuration: 1.0];

// animate your label layer
[[yourLabel layer] addAnimation:scale forKey:@"scaleText"];

例如,这通常是文本弹跳的动画方式。

您可以在设备开始旋转时启动此操作,并在旋转完成时检索动画,以便您可以使用适当的比例/位置更新标签。

您将需要调整以找到正确的时间和旋转。

于 2011-03-16T15:31:48.197 回答
1

didAnimateFirstHalfOfRotationToInterfaceOrientation:调用时更改字体大小。这样,一旦旋转完成,用户就不会看到更改。当旋转发生时,很难看到字体大小发生变化!

于 2010-07-31T06:23:37.363 回答