UILabel的自动滚动功能

时间:2013-11-04 08:39:16

标签: ios animation uiscrollview

我有谷歌并搜索它,但没有找到任何在互联网上解决我的问题,但我认为我的问题将是非常容易解决,但我找不到合适的关键字。

我有一个viewcontroller,其中包含一个名为ReadingView的文本,这个视图有一个非常长的文本,可以滚动阅读文本。当用户进入ReadingView时,它会自动向下自动滚动到底部,用户可以通过我实现的UISlider提高滚动速度

问题是我可以通过此代码进行自动滚动而没有任何问题

 [UIScrollView beginAnimations:@"scrollAnimation" context:nil];
 [UIScrollView setAnimationDuration:1.0f];
 [scroll setContentOffset:CGPointMake(x, y)];
 [UIScrollView commitAnimations];

但上面的代码是基于时间的。我必须找到基于帧或像素的动画。因为,如果我使用基于时间的动画,它会非常快地向下滚动到底部,而短文本将非常慢。

你们有没有想过我能不能做像

这样的动画
  

“嘿滚动视图,每个FRAME你必须向下移动10个像素,直到   上下文结束,我不在乎需要多长时间,修正速度!!“

感谢您的帮助,你们可以通过给我一个关键字或任何东西来帮助我

更新 由Fogmeister推荐完成。 概念是使用块动画并使用计算每个文本的时间 时间=文字长度/速度 并且您将获得每个文本的不同时间并使用该时间来制作动画。我从来没有想过这个......我一直在寻找的是PIXEL动画的功能,这是一个错误的关键词。

CGFloat scrollingPointSpeed = myslider.value; //value of UI Slider//
CGFloat time = offset/scrollingPointSpeed ;
[UIView animateWithDuration:time delay:0.0 options:UIViewAnimationOptionCurveLinear animation:^()
{
 self.scroll.contentOffset = CGPointMake(0, offset);
}
completion:nil];

1 个答案:

答案 0 :(得分:4)

好的,首先,您不应该使用CABasicAnimation。最佳实践方法是使用基于块的动画。

其次,这应该相当容易。

您可以计算滚动视图的最大偏移量...

CGFloat maxOffsetWidth = self.scrollView.contentSize.width - CGRectGetWidth(self.scrollView.frame);

这是可以应用的最大滚动量。即距离。

现在,要计算持续时间(时间),您需要考虑速度。可以说每秒50点。

所以现在让我们把它放在一起......

CGFloat maxOffsetWidth = self.scrollView.contentSize.width - CGRectGetWidth(self.scrollView.frame);

CGFloat scrollingPointsPerSecond = 50.0;

CGFloat time = maxOffsetWidth / scrollPointsPerSecond;

[UIView animateWithDuration:time
                 animations:^() {
    self.scrollView.contentOffset = CGPointMake(maxOffsetWidth, 0);
}];

显然,这是用于水平滚动,如果你想要垂直,那么只需使用不同的值。

快速编辑

上述动画功能使用默认动画曲线UIAnimationOptionCurveEaseInOut。这意味着滚动速度将从开始时的0缓慢加速,然后在结束时缓慢减速回到0。

你可能想要的是线性运动。即滚动的速度在整个过程中是相同的。要做到这一点,你需要一个与上面的功能略有不同的功能。它只是添加了一些额外的参数......

[UIView animateWithDuration:time
                      delay:0.0
                    options:UIViewAnimationOptionCurveLinear
                  animation:^() {
                      self.scrollView.contentOffset = CGPointMake(maxOffsetWidth, 0);
                  }
                 completion:nil];

这将完全符合你想要的线性运动。