用内容复制 UILabel 并滑出一个右和一个左
Posted
技术标签:
【中文标题】用内容复制 UILabel 并滑出一个右和一个左【英文标题】:Duplicate UILabel with Content and slide out one right & one left 【发布时间】:2015-07-25 14:34:11 【问题描述】:我是 Objective-c 的新手,不知道如何解决这个问题。我想我需要使用调用标签并更改标签文本的按钮对此进行编码。任何人都知道如何为 funFactLabel.text 设置动画,以使(旧)文本滑出并在单击按钮时滑入(新)文本?欢迎任何帮助!
- (IBAction)showFunFact:(UIButton *)sender
// ease of facts
funFactLabel.text = [self.factBook randomFact];
【问题讨论】:
【参考方案1】:让旧文本滑出新文本滑入的最简单方法是创建第二个标签并在动画完成时将其移除:
UILabel *oldLabel = [[UILabel alloc] initWithFrame:funFactLabel.frame];
[funFactLabel.superview addSubview:oldLabel];
oldLabel.text = funFactLabel.text;
// TODO: Configure oldLabel to match funFactLabel's font, colors, etc.
funFactLabel.text = [self.factBook randomFact];
funFactLabel.frame = CGRectOffset(funFactLabel.frame, funFactLabel.superview.bounds.size.width, 0);
[UIView animateWithDuration:0.5 animations:^
funFactLabel.frame = oldLabel.frame;
oldLabel.frame = CGRectOffset(oldLabel.frame, -oldLabel.superview.bounds.size.width, 0);
completion:^(BOOL finished)
[oldLabel removeFromSuperview];
];
如果你不需要滑动动画,你可以使用 UIView 的 transitionWithView 方法和 Apple 的内置动画之一来做类似的事情,而无需制作第二个标签:
[UIView transitionWithView:funFactLabel duration:0.5 options:UIViewAnimationOptionTransitionCrossDissolve animations:^
funFactLabel.text = [self.factBook randomFact];
completion:nil];
【讨论】:
第一个效果很好!真的很感谢你的帮助。剩下的唯一问题是标签在滑出时会改变大小。你知道如何解决这个问题吗? @Dklionsk 这个问题我没看懂,能具体点吗?澄清一下,oldLabel
应该与动画开始时的原始 funFactLabel
相同,funFactLabel
被赋予新文本并移动到它应该开始动画的地方(我猜右边屏幕)。然后oldLabel
向左滑动为funFactLabel
,新文本从右侧滑入,取而代之。
好的,我会试着解释一下。 oldLabel 的某些东西正在发生变化,并使标签总是更小一些。我现在不知道它是什么,我只是想弄清楚是什么。也许你知道问题出在哪里。 ' oldLabel.font = funFactLabel.font; oldLabel.textColor = funFactLabel.textColor; oldLabel.textAlignment = funFactLabel.textAlignment; oldLabel.numberOfLines = funFactLabel.numberOfLines; oldLabel.minimumScaleFactor = funFactLabel.minimumScaleFactor; oldLabel.lineBreakMode = funFactLabel.lineBreakMode; oldLabel.layoutMargins = funFactLabel.layoutMargins;'
现在我知道它在动画开始前向左移动了一点点。
能否包含代码链接,例如gist.github.com?基本上,您应该确保 (1) 您在 funFactLabel 上设置的任何特殊属性也设置在 oldLabel 上,以及 (2) 在设置 oldLabel 的框架以匹配 funFactLabel 的框架后,您不会在动画之前再次修改它。以上是关于用内容复制 UILabel 并滑出一个右和一个左的主要内容,如果未能解决你的问题,请参考以下文章