UILabel 中的动画文本更改
我正在为 UILabel
设置一个新的文本值。目前,新文本显示得很好。但是,我想在新文本出现时添加一些动画。我想知道如何使新文本的外观具有动画效果。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
我正在为 UILabel
设置一个新的文本值。目前,新文本显示得很好。但是,我想在新文本出现时添加一些动画。我想知道如何使新文本的外观具有动画效果。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(14)
UILabel 扩展解决方案
简单调用函数
感谢大家的所有提示。希望这对长期有帮助
UILabel Extension Solution
Simply Called function by
Thanks for all the tips guys. Hope this will help in long term
Swift 2.0:
或
Swift 2.0:
OR
动画的
duration
和timingFunction
属性可以省略,在这种情况下,它们将采用默认值0.25
和.curveEaseInEaseOut,分别。
与这样写是一样的:
The animation's
duration
andtimingFunction
properties can be omitted, in which case they will take their default values of0.25
and.curveEaseInEaseOut
, respectively.is the same as writing this:
Swift 4.2 解决方案(采用 4.0 答案并更新以编译新的枚举)
Swift 4.2 solution (taking 4.0 answer and updating for new enums to compile)
还有一种解决方案可以实现这一目标。 此处对此进行了描述。这个想法是通过以下方式子类化
UILabel
并重写action(for:forKey:)
函数:使用示例:
There is one more solution to achieve this. It was described here. The idea is subclassing
UILabel
and overridingaction(for:forKey:)
function in the following way:Usage examples:
这是基于 @SwiftArchitect 代码的 C# UIView 扩展方法。当涉及自动布局并且控件需要根据标签的文本移动时,此调用代码使用标签的超级视图作为过渡视图,而不是标签本身。我为该操作添加了一个 lambda 表达式,以使其更加封装。
调用代码:
This is a C# UIView extension method that's based on @SwiftArchitect's code. When auto layout is involved and controls need to move depending on the label's text, this calling code uses the Superview of the label as the transition view instead of the label itself. I added a lambda expression for the action to make it more encapsulated.
Calling code:
如果您想在 Swift 中延迟执行此操作,请尝试以下操作:
使用 @matt 创建的以下函数 - https://stackoverflow.com/a/24318861/1982051:
在 Swift 3 中将变成这样
If you would like to do this in
Swift
with a delay try this:using the following function created by @matt - https://stackoverflow.com/a/24318861/1982051:
which will become this in Swift 3
我想知道它是否有效,并且它完美地工作了!
Objective-C
Swift 3、4、5
I wonder if it works, and it works perfectly!
Objective-C
Swift 3, 4, 5
Objective-C
要实现真正交叉融合过渡(旧标签淡出,而新标签淡入),您不希望淡出为不可见。即使文本未更改,也会导致不必要的闪烁。
请改用此方法:
另请参阅:
对两个数字之间的 UILabel 文本进行动画处理?
在 iOS 10、9 中演示, 8:
使用 Xcode 8.2.1 和 Xcode 8.2.1 进行测试。 7.1、iOS 10 至 8.0 上的 ObjectiveC。
► 要下载完整项目,请在 Swift 食谱。
Objective-C
To achieve a true cross-dissolve transition (old label fading out while new label fading in), you don't want fade to invisible. It would result in unwanted flicker even if text is unchanged.
Use this approach instead:
Also see:
Animate UILabel text between two numbers?
Demonstration in iOS 10, 9, 8:
Tested with Xcode 8.2.1 & 7.1, ObjectiveC on iOS 10 to 8.0.
► To download the full project, search for SO-3073520 in Swift Recipes.
Swift 4
淡入淡出 UILabel(或任何 UIView)的正确方法是使用核心动画转换。这样就不会闪烁,如果内容不变也不会褪成黑色。
一个可移植且干净的解决方案是在 Swift 中使用
Extension
(调用先前更改的可见元素)调用如下所示:
► 在 GitHub 以及 快速食谱。
Swift 4
The proper way to fade a UILabel (or any UIView for that matter) is to use a
Core Animation Transition
. This will not flicker, nor will it fade to black if the content is unchanged.A portable and clean solution is to use a
Extension
in Swift (invoke prior changing visible elements)Invocation looks like this:
► Find this solution on GitHub and additional details on Swift Recipes.
从 iOS4 开始,显然可以用块来完成:
since iOS4 it can be obviously done with blocks:
这是实现此功能的代码。
Here is the code to make this work.
上述 SwiftArchitect 解决方案的 Swift 4.2 版本(效果很好):
调用:
Swift 4.2 version of SwiftArchitect's solution above (works great):
Invocation:
使用 Swift 5,您可以选择以下两个 Playground 代码示例之一,以便通过一些交叉溶解动画为
UILabel
的文本更改添加动画效果。#1.使用 UIView 的
transition(with:duration :options:animations:completion:)
类方法#2。使用
CATransition
和CALayer
'add(_:forKey:)
方法With Swift 5, you can choose one of the two following Playground code samples in order to animate your
UILabel
's text changes with some cross dissolve animation.#1. Using
UIView
'stransition(with:duration:options:animations:completion:)
class method#2. Using
CATransition
andCALayer
'sadd(_:forKey:)
method