2010-03-01 65 views
12

我將如何使用動畫將UITableView滾動到特定的位置?iPhone SDK - 如何使用動畫以編程方式滾動UITableView?

目前我使用這個代碼跳轉到一個位置:

//tableController -> viewDidLoad 
[self.tableView reloadData]; 
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:row inSection:0]; 
[self.tableView scrollToRowAtIndexPath:indexPath 
         atScrollPosition:UITableViewScrollPositionTop 
           animated:YES]; 

這段代碼的問題是,該表跳到右側沒有任何動畫正確的位置。有什麼辦法來啓用動畫或設置持續時間?

感謝您的任何幫助。

回答

0

我有兩個建議你去調查:

  1. 你在模擬器或iPhone本身運行你的應用程序?我注意到模擬器中的一些動畫行爲有所不同。

  2. 是否有可能您正在調用scrollToRowAtIndexPath:atScrollPosition:快速連續動畫兩次?這可能會「混淆」動畫。在處理給定事件時,您應該只調用一次該函數。

+0

感謝您的回覆。我在設備上運行代碼並在viewDidLoad方法中調用此代碼。 – dan 2010-03-01 22:24:42

+0

這可能是,無論出於何種原因,動畫不能從viewDidLoad開始,因爲這是視圖初始化的一部分。我並不是說我知道爲什麼會這樣,但這聽起來似乎是合理的。嘗試使用NSRunLoop的performSelector調度事件,並在調用該事件時進行滾動。 – richb 2010-03-01 22:45:01

5

嘗試註釋掉reloadData調用。如果我正確理解你的問題,並且你在viewDidLoad,那麼你不需要調用它。另外,如果你剛剛完成推視圖控制器,你將不會得到一個動畫滾動。您必須在viewDidLoad被調用的時間與動畫開始時間之間插入延遲(我發現四分之一秒的效果很好)。

23

它正常工作對我來說:

-(void) viewDidAppear:(BOOL)animated{ 
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:n inSection:0]; 
    [self.tableView scrollToRowAtIndexPath:indexPath 
        atScrollPosition:UITableViewScrollPositionTop 
          animated:YES]; 

} 

可以肯定,這是所謂的只有一次,你可以做這樣的驗證:

if(!isInitialized){ 
    isInitialized = YES; 
    .... 
} 
0

我知道這也許爲時已晚,但也許這對他人有幫助, 現在你可以用[tableView scrollsToTop]來滾動表格。

相關問題