UITextfield的contentoffset上的UIView.animateWithDuration:它剪辑文本(Swift)

时间:2015-01-12 20:24:12

标签: animation swift uitextview

我使用以下代码:

    UIView.animateWithDuration(30, delay: 0, options: UIViewAnimationOptions.CurveLinear, animations: {
        self.textView.contentOffset = CGPointMake(0, 700)
        }, completion: nil)

如果contentOffset最多约为100,则动画可以正常工作,并且所有文本都可见。高于此值的所有内容都会导致动画期间文本标签开头的文本消失。 contentOffset越高,动画期间文本消失的越多。所以我看了一段时间的白色空间,然后剩下的文字进入动画。另外:动画完成后,当我向上滚动时,所有文本都会再次显示。

我在各种超级视图中尝试了多个UITextviews。一般的想法是一种类似于动画的Credits,其中所有文本向上缓慢向上移动约30秒。

2 个答案:

答案 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];
}