2011-06-13 36 views
7

我正在創建一個類似於照片應用的ImageViewer。我有一個PagingScrollView,它是視圖控制器的視圖(在loadView中創建)。這些頁面是帶UIImageView子視圖的UIScrollViews。一切工作hunky dory,直到我試圖'跳過'(設置內容偏移量)除了第一個索引之外的索引。如果我跳過說,圖像'我',圖像正確顯示,但如果用戶執行一個輕擊手勢contentOffset重置自己回顯示圖像'0'。該錯誤不會與其他手勢(例如拖動)發生,如果您先執行其他手勢,則不會發生觸摸。UIScrollView以編程方式設置contentOffset問題

這是我的ImageViewerController

- (void)loadView 
{ 
    //Make the outer spaging scroll view 
    CGRect pagingScrollViewFrame = [self frameForPagingScrollView]; 
    UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:pagingScrollViewFrame]; 
    scrollView.pagingEnabled = YES; 
    scrollView.backgroundColor = [UIColor blackColor]; 
    scrollView.showsVerticalScrollIndicator = NO; 
    scrollView.showsHorizontalScrollIndicator = NO; 
    scrollView.contentSize = [self contentSizeForPagingScrollView]; 
    scrollView.delegate = self; 
    self.view = scrollView; 
} 

這是我正在嘗試設置內容的loadView偏移

#define myView (UIScrollView *)self.view 

[myView setContentOffset:[self contentOffsetForIndex:index]]; 

[..] 

- (CGPoint)contentOffsetForIndex:(NSUInteger)index 
{ 
    return CGPointMake((index * (self.view.frame.size.width)), 0); 
} 
+0

也許張貼手勢識別?這裏的一切對我來說都很好。 水龍頭是否調用某種類型的contentOffset更改? – Jensen2k 2011-06-13 22:54:07

+0

我不添加任何我自己的手勢識別器。點擊正在被分頁滾動視圖捕獲,並將其contentOffset重置爲顯示第0頁。雖然這樣做我得到scrollViewDidScroll委託消息 – Mike 2011-06-14 15:57:45

+0

我遇到同樣的問題,在iOS 6中,它爲iOS 5的工作正常。此外,一旦我禁用pagingEnabled或如果我禁用滾動動畫,此錯誤消失。任何人都知道更好的方法來解決這個問題? – AmineG 2013-06-07 08:14:31

回答

12

你水平或垂直滾動​​?您的偏移邏輯
CGPointMake((index * (self.view.frame.size.width)), 0);將移動到Y軸的0。 編輯
我是一個懶惰寫作的方法。
這裏是我採取找抵消相關問題的方法:

一)編程偏移由setContentOffset:,scrollRectToVisible,SETFRAME(UIScrollView中的設置,內部調用SetContentOffset)。首先檢查你的代碼中的所有這些,如果它們是正確的。 b)打印在scrollViewDidScroll:方法中設置偏移的日誌。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    NSLog(@" Offset = %@ ",NSStringFromCGPoint(scrollView.contentOffset)); 
} 

這將幫助你確定所設置的偏移值(在大多數情況下,所需的偏移是由另一調用setContentOffset重寫:在代碼中的一些地方,可以說目前的偏移量爲(130,0 ),你要設置的偏移量(300,0),它發生在步驟(如動畫),你可能會得到像日誌
Offset = {130,0}
Offset = {190,0}
Offset = {220,0}
Offset = {270,0}
Offset = {300,0}

如果有一些其他的調用setContentOffset(動畫),可以說,它集偏移到(0,0),你得到的日誌看起來像
Offset = {130,0}
Offset = {190,0}
Offset = {90, 0}
Offset = {220,0}
Offset = {60,0}
Offset = {270,0}
Offset = {30,0}
Offset = {300,0}
Offset = {0,0}

如果您注意到日誌中的第二種模式,則可以確定存在某個未預期的對setContentOffset的調用。
3)一旦識別出有對setContentOffset的非預期調用的調用,嘗試找到它的源(將斷點設置爲setContentOffset可能有所幫助),並且可以根據每個案例進行處理。例如:
_adjustContentOffsetIfNecessary,是在爲UIScrollView設置幀時調用的內部方法。這可能是原因(嘗試在設置框架後應用上一個偏移量)。

希望這有助於(MEE過,在獲得下投票移除:))

+0

我只是水平滾動。分頁scrollView的contentSize.height足夠小,因此垂直滾動被禁用,所以基本上我只想讓contentOffset的yPos保持不變。問題是偏移量的x部分在第一次觸摸 – Mike 2011-06-14 14:11:00

+0

@ monkybonk05上重置自己,您可能會看到編輯,希望它有幫助。 – Tatvamasi 2011-06-15 05:14:05

+0

感謝您的詳細建議。目前我沒有時間對其進行測試,但這聽起來像是一個可靠的建議,並且會盡我所能。當我有他們時,我會更新線程的結果= D – Mike 2011-06-15 15:54:41

1

我有同樣的問題(有點),但我解決我的問題是,我禁用了

pagingEnabled 

的UIScrollView ...當您的UIScrollview重置到設置ContentOffset時,特定的地方,請檢查您的pagingEnabled被禁用...

+0

我有類似的問題。我使用分頁,我想設置偏移量。即使暫時禁用它,它仍然沒有設置。 – 2015-07-17 12:47:27