我有一个父UIView,其UIView(UILabel在下面的代码中使用),其框架设置为父级的边界,并且其autoresizingMask设置为灵活的宽度和高度:
UIView* parentView = [[UIView alloc] initWithFrame:CGRectMake(0,320,480)]; UILabel* childLabel = [[UILabel alloc] initWithFrame:parentView.bounds]; childLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; childLabel.textAlignment = UITextAlignmentCenter; childLabel.text = @"Hello";
我想要能够为父视图的框架,特别是其大小设置动画,并将子视图调整为动画的一部分:
[UIView animateWithDuration:1.0 animations:^{ parentView.frame = CGRectMake(0,160,240); }];
作为这个动画的结果,我希望UILabel的文本与父视图的动画一起动画,从视觉上看,文本将从(160,240)中心移动到(80,120).然而,代替动画,子视图的框架将立即被设置为动画结尾应该具有的值,因此当动画开始时,您将看到文本的位置立即跳转.
有没有办法将子视图作为动画的一部分自动调整?
解决方法
我完全不知道发生了什么,但我认为核心问题是UIKit不想在动画的每个帧重新渲染文本,所以UILabel的内容不是动画的.默认情况下,UILabel的contentMode属性是UIViewContentModeRedraw,这意味着一旦属性设置,它将重新绘制目标大小的UILabel.
如果将contentMode更改为UIViewContentModeCenter,内容将不会重新绘制,并将在UILabel中保持居中.
childLabel.contentMode = UIViewContentModeCenter;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。