我目前正在制作一个使用自定义视图控制器容器的应用程序。屏幕上同时有多个视图,当点击其中一个视图时,所选视图控制器会动画显示为全屏。这样做时,所选视图控制器的子视图也会缩放(边框、字体大小等)。尽管如此,UILabel的字体属性无法动画显示,导致了一些问题。我尝试了多种解决方案,但都很糟糕。
我尝试过的解决方案是:
1.截取较大视图的屏幕截图,并设置更改的动画(类似于Flipboard的操作)
1.使用transform属性制作动画
1.缩小UIScrollView,并在全屏显示时放大。
1.将adjustsFontSizeToFitWidth设置为YES并在动画之前设置fontSize
其中一个是迄今为止最好的解决方案,但我对此并不满意。
我正在寻找其他建议,如果有人有任何或一个UILabel替代品,动画顺利使用[UIView动画..]。
下面是一个很好的示例,它类似于我希望UILabel执行的操作:http://www.cocoawithlove.com/2010/09/zoomingviewcontroller-to-animate-uiview.html
编辑:此代码有效
// Load View
self.label = [[UILabel alloc] init];
self.label.text = @"TEXT";
self.label.font = [UIFont boldSystemFontOfSize:20.0];
self.label.backgroundColor = [UIColor clearColor];
[self.label sizeToFit];
[self.view addSubview:self.label];
// Animation
self.label.font = [UIFont boldSystemFontOfSize:80.0];
self.label.transform = CGAffineTransformScale(self.label.transform, .25, .25);
[self.label sizeToFit];
[UIView animateWithDuration:1.0 animations:^{
self.label.transform = CGAffineTransformScale(self.label.transform, 4.0, 4.0);
self.label.center = self.view.center;
} completion:^(BOOL finished) {
self.label.font = [UIFont boldSystemFontOfSize:80.0];
self.label.transform = CGAffineTransformScale(self.label.transform, 1.0, 1.0);
[self.label sizeToFit];
}];
9条答案
按热度按时间axkjgtzd1#
你可以改变你的
UILabel
的大小和字体与动画如下..这里我只是把如何改变UILabel
的字体与变换动画的例子。xyhw6mcr2#
2017年以后......
危重:
避免模糊的关键点是必须从最大尺寸开始,然后缩小它。然后在需要时扩展到"1"。
为了快速"弹出"(如高亮动画),可以扩展到1以上,但如果您在两个大小之间转换,* 请将较大的大小设置为"正确"的正常大小 *。
klsxnrf13#
我在Swift中创建了
UILabel
扩展。如果标签文本左对齐或右对齐,则取消注解行。
m2xkgtsf4#
也可以使用CATextLayer,它将fontSize作为可设置动画的属性。
我在我的项目中使用了它:https://github.com/yinanq/AngelListJobs
这个动画保持字体左上对齐(不像CGAffineTransformScale从中心缩放标签),赞成或反对取决于您的需要。CATextLayer的缺点是CALayers不支持自动布局约束动画(我碰巧需要它,并通过创建一个只包含CATextLayer的UIView并对其约束进行动画处理来解决它)。
pftdvrlh5#
对于那些不寻求转换,而是寻求实际值变化的人:
uxhixvfz6#
适用于想要调整动画方向的用户
我已经为
UILabel
创建了一个扩展来动态显示字体大小的变化如果你想调整动画的方向,使用下面的方法,并把一个合适的锚点。
环球银行间金融电信协会
目标C
例如,要将标签字体大小更改为30,持续时间从中心开始为1s,比例更大。
环球银行间金融电信协会
目标C
v1uwarro7#
斯威夫特3.0和斯威夫特4.0
3duebb1j8#
我发现这里的每一条建议都不充分,原因如下:
1.它们实际上并不改变字体大小。
1.他们不玩好帧大小和自动布局。
1.它们的接口并不简单,并且/或者在动画块中不能很好地发挥作用。
为了保留所有这些特性,并且仍然获得平滑的动画过渡,我结合了变换方法和字体方法。
界面很简单,只需要更新
fontSize
属性,就可以更新字体大小,在动画块中完成这个操作,它就会有动画效果。至于实现,有简单的方法,也有更好的方法。
简单:
现在,这样做的问题是布局在完成时可能会断断续续,因为视图的框架一直基于原始字体来调整大小,直到动画完成,此时框架会更新以适应没有动画的目标字体。
解决这个问题有点困难,因为我们需要覆盖
intrinsicContentSize
。你可以通过子类化UILabel
或者混合方法来实现。我个人混合了这个方法,因为它让我保持一个通用的fontSize
属性对所有UILabel
可用,但是这取决于一些库代码,我不能在这里分享。下面是你如何使用子类化来实现这一点。接口:
实施:
2nbm6dog9#
如果您想从另一个锚点设置文本大小的动画,下面是Swift 5解决方案:
如何申请:
分机号: