2013-10-04 48 views
2

我試圖下面的委託方法中修改我的滾動的contentOffset到setContentOffset:無法在scrollViewDidEndDragging

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate 

我曾嘗試以下兩種:

[UIView animateWithDuration:.2 animations:^ { 
    [scrollView setContentOffset:CGPointZero animated:NO]; 
}]; 

[UIView animateWithDuration:.2 animations:^ { 
    CGRect svBounds = self.bounds; 
    svBounds.origin.y = 0; 
    self.bounds = svBounds; 
}]; 

問題是,儘管這會立即改變偏移量(通過日誌t他動畫完成),它不會更改可見的滾動位置。我的滾動視圖的後續委託方法進一步證明了這一點,它表明邊界確實沒有改變。這意味着y位置不是0.

是否禁止更改此特定委託方法中的內容偏移量?如果是這樣,我什麼時候可以改變偏移量?我試圖執行一次用戶完成拖動後(一定量後)將可見滾動區域返回到頂部的動畫。

謝謝!

+0

我能得到這個在scrollViewWillBeginDecelerating工作。這在scrollViewDidEndDragging和scrollViewWillEndDragging中都不起作用。也許是因爲在那些方法被調用的時候它們還在加速呢?我不確定...我不知道爲什麼這是,也許別人可以擺脫光線。 – AbuZubair

回答

1

您應該在動畫之前「無」您的scrollView委託,在scrollViewDidEndDragging:willDecelerate:中設置內容偏移將導致重複委派。

self.scrollView.delegate = nil; 
[self.scrollView setContentOffset:CGPointMake(x, y) animated:YES]; 
self.scrollView.delegate = self; 
0

取決於你正在努力實現的,你可能有更多的運氣與此委託方法的效果:

- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset 

您可以選擇偏移要使用滾動視圖,以什麼樣的目標內容減速到用戶停止拖動。

5

我最終做的是再次調度到主隊列。 含義:

-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate { 
NSLog(@"END DRAG"); 
CGFloat yVelocity = [scrollView.panGestureRecognizer velocityInView:scrollView].y; 
if (yVelocity < 0) { 
    NSLog(@"Up"); 
} else { 
    NSLog(@"Down"); 
} 

if (yVelocity < 0 && scrollView.contentOffset.y < -100 && scrollView.contentOffset.y > -200) //UP - Hide 
{ 
    NSLog(@"hiding"); 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     [scrollView setContentOffset:CGPointMake(0, 0) animated:YES]; 
    }); 
} 
else if (yVelocity > 0 && scrollView.contentOffset.y < -100) //DOWN - Show 
{ 
    NSLog(@"showing"); 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     [scrollView setContentOffset:CGPointMake(0, -300) animated:YES]; 
    }); 
} 

} 

和它的實際工作:-)

+0

我不知道你爲什麼想要在主線上發送信息,但經過近一天的搜索如何完成這個動畫,這是我發現的完美工作的** only **解決方案。謝謝! – thattyson