当您实际滚动到下一页时,我正在尝试重现滚动视图的平滑动画,并启用分页。它似乎是UIViewAnimationCurveEaseInOut
,但我需要一个“下一页”按钮并以编程方式触发滚动。
这是我的代码:
-(void) scrollToPage:(int)page
{
UIScrollView *scrollView = contentView;
CGPoint offset = CGPointMake(scrollView.bounds.size.width * page, scrollView.contentOffset.y);
[scrollView setContentOffset:offset animated: YES];
[self pageControlUpdate];
}
-(void) scrollToNextPage
{
[self scrollToPage:(pageControl.currentPage + 1)];
}
我无法重现UIViewAnimationCurveEaseInOut
的平滑度,
使用setContentOffset
或使用scrollRectToVisible
...
它带着丑陋的线性动画进入下一页
我甚至尝试手动设置动画:
[UIView animateWithDuration:.5 delay:0 options:UIViewAnimationCurveEaseInOut animations:^{
scrollView.contentOffset = offset;
} completion:^(BOOL finished) { } ];
我错在哪里?
答案 0 :(得分:21)
每次制作自己的动画时,都必须将否作为animated:
参数传递:
- (void)scrollToPage:(int)page
{
UIScrollView *scrollView = contentView;
CGPoint offset = CGPointMake(scrollView.bounds.size.width * page,
scrollView.contentOffset.y);
[UIView animateWithDuration:.5
delay:0
options:UIViewAnimationCurveEaseInOut
animations:^{
[scrollView setContentOffset:offset animated:NO];
} completion:nil];
[self pageControlUpdate];
}
答案 1 :(得分:6)
使用公共API,我认为目前不可能。假设您在动画过程中不需要用户交互,那么您最好设置动画UIScrollView
子视图的位置(即滚动视图的内容),然后调整{{ 1}}完成后没有动画。你可以这样做:
contentOffset
我可以确认这是按预期工作的,我自己测试了。
答案 2 :(得分:4)
[UIView animateWithDuration:(Animation_Duration)
delay:0.0
options:UIViewAnimationOptionCurveEaseInOut
animations:^{
[scroll setContentOffset:CGPointMake(PointX, PointY) animated:NO];
}
completion:^(BOOL finished){}];`
答案 3 :(得分:3)
这堂课绝对拯救了我的生命:
它有
- (void)setContentOffset:(CGPoint)contentOffset
withTimingFunction:(CAMediaTimingFunction *)timingFunction
duration:(CFTimeInterval)duration;
就像私有API一样,但是包含所有公共方法和数学。