2
我正在使用scrollViewWillEndDragging:withVelocity:targetContentOffset:將我的scrollview對齊到頁面。我定製了基於速度的行爲。它工作正常,但滾動視圖減速太早,偏移較大。 contentOffset結束於正確的位置,但當滾動即將結束時,速度變得非常低,以至於需要大約3-4秒才能到達目標。嘗試滾動3-4個全屏頁面時,問題會變得更加明顯。下面的代碼來自獨立項目(創建新的Single View項目,在故事板中添加全屏滾動視圖,僅安裝iPad,橫向模式)。UIScrollView減速太早
僅供參考,更改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
「我使用scrollViewWillEndDragging:withVelocity:targetContentOffset:將我的scrollview捕捉到頁面」我可以問爲什麼你不使用分頁滾動視圖嗎?然後*它*會爲你抓住頁面。這不是您需要重新創建的輪子。 – matt 2013-05-05 02:39:52
因爲這不允許您滾動多個頁面。這種方法應該是在那裏,所以我不必重新發明輪子---) – user1727274 2013-05-05 03:44:41
那麼爲什麼不使用滾動式UIPageViewController?甚至不滾動式。 – matt 2013-05-05 13:12:18