我正在使用scrollViewWillEndDragging:withVelocity:targetContentOffset:将我的scrollview捕捉到页面。我根据速度定制了行为。它的工作正常,但滚动视图在大偏移时过早减速。 contentOffset最终位于正确的位置,但是当滚动即将结束时,速度变得如此之低,以至于需要大约3-4s才能到达目标。尝试滚动3-4个全屏页面时问题变得更加明显。下面的代码来自一个独立的项目(创建新的单一视图项目,在故事板中添加全屏滚动视图,仅设置iPad,横向模式)。
仅供参考,更改decelerateRate并不能解决问题(它只会使滚动更慢/更快)。
#import "ViewController.h"
@implementation ViewController
@synthesize scrollView;
- (void)viewDidLoad
{
[super viewDidLoad];
pages_ = 30;
UIView* arr[pages_];
for (int i = 0; i < pages_; ++i) {
CGRect frame = CGRectMake(1024 * i, 0, 1024, 768);
arr[i] = [[UIView alloc] initWithFrame:frame];
[scrollView addSubview:arr[i]];
arr[i].backgroundColor = (i%2) ? [UIColor redColor] : [UIColor greenColor];
}
scrollView.contentSize = CGSizeMake(1024 * pages_, 768);
scrollView.delegate = self;
scrollView.decelerationRate = UIScrollViewDecelerationRateFast;
}
- (void)scrollViewWillEndDragging:(UIScrollView *)sv
withVelocity:(CGPoint)velocity
targetContentOffset:(inout CGPoint *)targetContentOffset {
CGFloat pageWidth = scrollView.frame.size.width;
unsigned int page = floor((scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
int scrollToPage = page + velocity.x*1.5;
scrollToPage = MAX(0, MIN(scrollToPage, (int)pages_ - 1));
NSLog(@"Scrolling by %d pages", abs(page-scrollToPage));
targetContentOffset->x = scrollView.frame.size.width * scrollToPage;
targetContentOffset->y = 0;
NSLog(@"Scrolling to offset %f", targetContentOffset->x);
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)sv {
NSLog(@"scrollViewDidEndDecelerating");
}
@end
答案 0 :(得分:0)
在与WWDC的一些Apple工程师交谈后,这似乎是iOS中的一个错误。它可能没有在iOS 7中修复