UIView.animateWithDuration 在 UITextfield 的 contentoffset 上:它剪辑文本 (Swift)
UIView.animateWithDuration on UITextfield's contentoffset: It clips the text (Swift)
我使用以下代码:
UIView.animateWithDuration(30, delay: 0, options: UIViewAnimationOptions.CurveLinear, animations: {
self.textView.contentOffset = CGPointMake(0, 700)
}, completion: nil)
如果 contentOffset 大约为 100,则动画可以正常工作并且所有文本都可见。高于此值的所有内容都会导致动画期间文本标签开头的文本消失。 contentOffset 越高,动画期间消失的文本就越多。所以我看到白色 space 一段时间,然后剩余的文本进入动画。另外:动画完成后,当我向上滚动时所有文本再次可见。
我在各种超级视图中尝试过多个 UITextview。总体思路是一种类似于动画的致谢名单,其中所有文本缓慢向上移动约 30 秒。
您可以尝试像下面这样将小动画循环在一起。
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)
})
})
}
即使在 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];
}
我使用以下代码:
UIView.animateWithDuration(30, delay: 0, options: UIViewAnimationOptions.CurveLinear, animations: {
self.textView.contentOffset = CGPointMake(0, 700)
}, completion: nil)
如果 contentOffset 大约为 100,则动画可以正常工作并且所有文本都可见。高于此值的所有内容都会导致动画期间文本标签开头的文本消失。 contentOffset 越高,动画期间消失的文本就越多。所以我看到白色 space 一段时间,然后剩余的文本进入动画。另外:动画完成后,当我向上滚动时所有文本再次可见。
我在各种超级视图中尝试过多个 UITextview。总体思路是一种类似于动画的致谢名单,其中所有文本缓慢向上移动约 30 秒。
您可以尝试像下面这样将小动画循环在一起。
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)
})
})
}
即使在 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];
}