我有一个UIView作为容器用一个UILabel里面是这样的:
------------- ---------
| | | |
|Label text | |Label..|
| | --> | |
| | | |
| | | |
------------- ---------
现在,当我使用:
UIView animateWithDuration:animations:
并尝试动画的突然的UILabel与替换过程中设置宽度的UIView(其中包含的UILabel)的较小然后“...”,而无需平滑过渡到它。 我安装了的UILabel autoresizingmask到UIViewAutoresizingFlexibleWidth,UIViewAutoresizingFlexibleRightMargin以保持其离开,并设置contentmode到左。
尝试其他内容模式,如:规模,以填补,看点配合,看点填补犯规要么解决我的问题,因为他们缩放文本,然后它看起来很奇怪。
任何人有一个想法如何得到该的UILabel平稳过渡?
我前一段时间我的动画标签所描述的方式,但你必须把它的一些负担。 基本思路: - 标签添加到containerview与clipsToBounds:YES。 - 不要动画标签框架,而不是动画containerview的框架,让您的标签将有一个平稳过渡。 - 使用的省略号(...)一个单独的标签,这样就可以过动画这一部分。
不幸的是标签不缩放; 改变它的框架改变,其中文本放置,但文字的大小不能扩展这种方式。 这样基本的动画是出来,另一种是断火,每次预定量收缩标签的帧计时器触发的定时器。
当然,你会希望标签设置setAdjustsFontSizeToFitWidth
属性设置为YES
。
注意:如果尽量避免实际发射定时器第二的每千分之五的。
- (void)fireTimer
{
timer = [NSTimer scheduledTimerWithTimeInterval:0.005 target:self selector:@selector(animate) userInfo:nil repeats:YES];
}
- (void)animate
{
[label setAdjustsFontSizeToFitWidth:YES];
if (label.frame.size.width > 100) {
[label setFrame:CGRectMake(label.frame.origin.x, label.frame.origin.y, label.frame.size.width-1, label.frame.size.height)];
}else{
[timer invalidate];
timer = nil;
}
}
调整自转过程中一个UILabel当我有类似的问题,并通过使用CADisplayLink这样解决它。
首先,请致电willAnimateRotationToInterfaceOrientation方法displayLinkTimer。
displayLinkTimer = [CADisplayLink displayLinkWithTarget:self selector:@selector(resizeTextLabel)];
[displayLinkTimer addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
然后,以同样的速度调整其大小一种无形的UIView,我创建了名为TextView的调整的标签。 TextView的具有相同的什么,我想我UILabel的框架是一个框架,其大小在willAnimateRotationToInterfaceOrientation方法的改变。 我能够通过访问的TextView的表示层以同样的速度来调整。
- (void)resizeTextLabel{
if (UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation)) {
if (textLabel.frame.size.width < textView.frame.size.width -20) {
textLabel.frame = CGRectMake(0, 0, [[textView.layer presentationLayer] frame].size.width, [[textView.layer presentationLayer] frame].size.height);
}else{
[timer invalidate];
timer = nil;
}
}
else{
if (textLabel.frame.size.width > textView.frame.size.width -20) {
textLabel.frame = CGRectMake(0, 0, [[textView.layer presentationLayer] frame].size.width, [[textView.layer presentationLayer] frame].size.height);
}else{
[timer invalidate];
timer = nil;
}
}
}
希望这可以帮助别人。
老问题,但帮我:
override var frame: CGRect {
didSet {
self.layoutSubviews()
}
}