2013-05-05 50 views
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 
+0

「我使用scrollViewWillEndDragging:withVelocity:targetContentOffset:將我的scrollview捕捉到頁面」我可以問爲什麼你不使用分頁滾動視圖嗎?然後*它*會爲你抓住頁面。這不是您需要重新創建的輪子。 – matt 2013-05-05 02:39:52

+0

因爲這不允許您滾動多個頁面。這種方法應該是在那裏,所以我不必重新發明輪子---) – user1727274 2013-05-05 03:44:41

+0

那麼爲什麼不使用滾動式UIPageViewController?甚至不滾動式。 – matt 2013-05-05 13:12:18

回答

0

在與WWDC的一些Apple工程師交談之後,這似乎是iOS中的一個錯誤。它可能不是固定在iOS 7