Ein*_*eln 6 animation uiscrollview ios
我有谷歌搜索它,但没有在互联网上找到任何解决我的问题,但我认为我的问题将是非常容易解决,但我找不到合适的关键字.
我有一个viewcontroller包含一个名为ReadingView的文本,这个视图有一个非常长的文本,可以滚动阅读文本.当用户进入ReadingView时,它会自动向下滚动到底部,用户可以通过我实现的UISlider提高滚动速度
问题是我可以通过此代码进行自动滚动而不会出现任何问题
[UIScrollView beginAnimations:@"scrollAnimation" context:nil];
[UIScrollView setAnimationDuration:1.0f];
[scroll setContentOffset:CGPointMake(x, y)];
[UIScrollView commitAnimations];
Run Code Online (Sandbox Code Playgroud)
但上面的代码是基于时间的.我必须找到基于帧或像素的动画.因为,如果我使用基于时间的动画,它会非常快地向下滚动到底部,而短文本将非常慢.
你们有没有想过我能做动画吗?
"嘿滚动视图,每个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];
Run Code Online (Sandbox Code Playgroud)
好的,首先,你不应该使用CABasicAnimation. 最佳实践方法是使用基于块的动画。
其次,这应该相当容易。
您可以计算滚动视图的最大偏移量......
CGFloat maxOffsetWidth = self.scrollView.contentSize.width - CGRectGetWidth(self.scrollView.frame);
Run Code Online (Sandbox Code Playgroud)
这是可以应用的最大滚动量。即距离。
现在,要计算出持续时间(时间),您需要记住一个速度。假设每秒 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);
}];
Run Code Online (Sandbox Code Playgroud)
显然,这是针对水平滚动的,如果您想要垂直滚动,则只需使用不同的值。
快速编辑
上述动画函数使用默认的动画曲线UIAnimationOptionCurveEaseInOut。这意味着滚动的速度将从开始时缓慢加速到 0,然后在结束时缓慢减速回 0。
您可能想要的是线性运动。即滚动的速度自始至终都是相同的。为此,您需要一个与上面的函数略有不同的函数。它只是添加了一些额外的参数......
[UIView animateWithDuration:time
delay:0.0
options:UIViewAnimationOptionCurveLinear
animation:^() {
self.scrollView.contentOffset = CGPointMake(maxOffsetWidth, 0);
}
completion:nil];
Run Code Online (Sandbox Code Playgroud)
这将完全按照您想要的线性运动进行。
| 归档时间: |
|
| 查看次数: |
966 次 |
| 最近记录: |