我使用以下代码:
UIView.animateWithDuration(30, delay: 0, options: UIViewAnimationOptions.CurveLinear, animations: {
self.textView.contentOffset = CGPointMake(0, 700)
}, completion: nil)
如果contentOffset最多约为100,则动画可以正常工作,并且所有文本都可见。高于此值的所有内容都会导致动画期间文本标签开头的文本消失。 contentOffset越高,动画期间文本消失的越多。所以我看了一段时间的白色空间,然后剩下的文字进入动画。另外:动画完成后,当我向上滚动时,所有文本都会再次显示。
我在各种超级视图中尝试了多个UITextviews。一般的想法是一种类似于动画的Credits,其中所有文本向上缓慢向上移动约30秒。
答案 0 :(得分:4)
您可以像下面这样尝试循环播放小动画。
func animate(count:Int)
{
if (count > 100)
{
return
}
UIView.animateWithDuration(1, delay: 0, options: UIViewAnimationOptions.CurveLinear, animations: {
self.textView.contentOffset = CGPointMake(0, self.textView.contentOffset.y + 10)
}, completion: { finished in
dispatch_async(dispatch_get_main_queue(),{
self.animate(count+1)
})
})
}
答案 1 :(得分:0)
即使在iOS 10 SDK中,这仍然是一个问题。
要解决这个问题,我使用setContentOffset:
手动设置滚动动画,使用performSelector: withObject: afterDelay:
延迟每一步并实现一次滚动一个增量的方法(在我的情况下为1/2点)。
要防止用户手动覆盖滚动动画,您必须手动禁用用户交互(animateWithDuration:
在动画播放时自动禁用用户滚动),您还必须启用滚动功能。我也禁用了选择和编辑,因为这适合我的使用:
注意:Objective-C代码如下
textBox.editable = NO;
textBox.selectable = NO;
textBox.scrollEnabled = YES;
textBox.userInteractionEnabled = NO;
float contentLength = textBox.contentSize.height - textBox.frame.size.height;
float timePerLine = audioLength / contentLength;
for (float i = 0; i < contentLength; i+=0.5){
[self performSelector:@selector(scrollOneLine) withObject:nil afterDelay:timePerLine * i];
}
然后实现了一个方法,用作一个选择器,一次滚动一个增量
-(void) scrollOneLine {
float currentPosition = textBox.contentOffset.y;
[textBox setContentOffset:CGPointMake(0, currentPosition + 0.5) animated:NO];
}