2012-08-14 92 views
1

我有UIScrollView和約20項(UIViewControllers)。我在每個頁面上都有按鈕,可以幫助我在這20個項目之間跳轉。所以,如果我在第一個視圖,並按下按鈕,將我帶到第18項,整個滾動視圖滾動到該視圖和動畫滾動操作,所以我能夠看到第1和第18項之間的所有視圖。在沒有動畫的情況下滾動到UIScrollView中的特定視圖

是否有可能從1跳轉到滾動視圖的18項沒有這個長篇動畫(我想看到的動畫就像我相鄰兩個項目之間滾動)?

我想這行代碼會幫助我阻止這個長期滾動動畫:

[scrollView scrollRectToVisible:rect animated:NO]; 

,但沒有運氣。

有什麼建議嗎?

[編輯#1]方法我在哪裏滾動到特定視圖看起來是這樣的:

// I found view controller to which I want to scroll 

CGRect rect = selectedViewController.view.frame; 

float duration; // I calculate animation duration in some way now 

[UIView beginAnimations:@"ScrollRectToVisible" context:nil]; 
[UIView setAnimationCurve:UIViewAnimationTransitionNone]; 

[scrollView scrollRectToVisible:rect animated:NO]; 
[UIView commitAnimations]; 

有了這個代碼,當我從第一次滾動到UIScrollView的最後一個視圖,應用滾動到最後視圖,並且動畫會持續計算的持續時間值。我看到每個視圖都存在於第一個和最後一個之間。我的願望是立即從第一個視圖滾動到最後一個視圖,而沒有看到它們之間的所有視圖。

當我改變crollRectToVisible行:

[scrollView scrollRectToVisible:rect animated:YES]; 

同樣的事情發生,只是這一次滾動動畫偏偏喜歡快5倍,但仍顯示之間的所有意見。

當我從方法除去動畫,過渡立即發生。我的問題是如何實現這個動畫的最後一個視圖,看起來一樣滑動到UIScrollView中的鄰居視圖?

+0

你的意思是沒有運氣?沒有變化或動畫,你不想要發生? – 2012-08-14 10:44:49

+1

嘗試setContentOffset – 2012-08-14 10:44:52

+0

@Nikita Pestrov:我現在將編輯原始問題以回答您的問題。 – uerceg 2012-08-14 10:52:49

回答

1

所以你需要什麼,所以爲:

  • 假設你有5次,A,B,C,d,E
  • 你在 'B',並希望以動畫爲' e'好像'e'在'b'旁邊,沒有顯示'c'或'd'
  • 當用戶點擊一個表示他們想看到'e'的按鈕時,您將首先將'c'和' e'
  • 從'b'到'e'(現在是它的鄰居),您可以生成動畫
  • 當動畫停止時應該使用塊動畫與完成塊),你做的這一切:
    • 交換「C」和「E」
    • 設置了滾動的contentOffset因此水平值,其中「E」是

現在你的數組又恢復了原來的樣子,用戶對它沒有任何智慧。

+0

非常感謝您的回答,這似乎是非常有趣的解決方案。你能否指出我如何訪問UIScrollView對象中的項目以便能夠交換它們? – uerceg 2012-08-14 12:20:53

+0

你說你有一個有20個對象的scrollView。這似乎意味着你有20個視圖,每個視圖添加爲scrollView的子視圖(或者你創建了一個容器視圖並將20個項目添加到該視圖。)每個項目都有一個框架(我假設),以便每個框架都緊靠它旁邊的視圖。這些是你的'a','b','c'項目。要「重新排序」它們,您應該只能交換幀值(只要它們不重疊) – 2012-08-14 13:24:32

+0

感謝David,就是這樣。非常感謝解決方案,就我而言,這是我的問題的答案,很好,很容易。 – uerceg 2012-08-15 06:33:08

1

唯一可能的途徑不顯示所有兩者之間的觀點是... ...而不是讓他們在所有的,或使其不可見。

的簡單的解決方案,即不能滿足你,雖然是對所有這些之間的視圖的α設定爲零,然後滾動。問題是,它會滾動真快,我猜。

另外一個更復雜的解決方案,是旁邊都刪除了這些意見,或將他們的阿爾法再次爲零,但移動該目標以第一個,這會給你想要的效果。滾動後,您應該將該視圖移回到原點,並同時滾動到原點(通過更改contentOffset) - 所以用戶不會注意到它,然後將所有視圖都帶回屏幕。

所以它看起來就像縮小了你的滾動視圖。

+0

感謝Nikita,我試過David的建議。但謝謝你的回答! – uerceg 2012-08-15 06:32:21

+0

事實上,他建議我做同樣的事情) – 2012-08-15 09:08:33

+0

是的,我明白,他只是第一個回答我的問題,我試圖通過他的指示解決我的問題。同樣的事情,你已經建議,如果我能我會標記兩個答案是正確的。非常感謝一次。 – uerceg 2012-08-15 09:40:50

相關問題