2017-09-17 7 views
0

私はタブ付きバービューコントローラを持っています。メインビューコントローラには、コレクションビューがあります。あなたは一つnewAchievementIndexPaths 1のインデックスパスを介しもし意志サイクルを見ることができるようにタブを切り替えた後、タブ付きビューコントローラ、コレクションビューのscrollToItemが機能しない

// Called in viewDidAppear 
func animateNewAchievements() { 
     if let indexPath = newAchievementIndexPaths.first { 
      collectionView.scrollToItem(at: indexPath, at: .bottom, animated: true) 
     } 
    } 
// Delegate method 
func scrollViewDidEndScrollingAnimation(_ scrollView: UIScrollView) { 
     if let indexPath = newAchievementIndexPaths.first { 
      if let cell = collectionView.cellForItem(at: indexPath) as? TrophyCollectionViewCell { 
       cell.animate(completion: { 
        if self.newAchievementIndexPaths.count > 0 { 
         self.newAchievementIndexPaths.removeFirst() 
        } 
        self.perform(#selector(self.animateNewAchievements), with: nil, afterDelay: 0.4) 
       }) 
      } 
     } 
    } 

:私はそうのような配列に含まれているセルのリストをアニメーション化します。これはすべて正常に動作しますが、プロセスを中断してタブを切り替えてビューコントローラに戻ると、アニメーションは継続しません。それはcollectionView.scrollToItem(at: indexPath, at: .bottom, animated: true)を呼び出しますが、アニメーション化されず、デリゲートは呼び出されません。しかし、私が指でテーブルを少しだけスクロールして放置して画面に戻ると、問題なくアニメーションが再開されます。

ここで何が起こっているのですか?

+0

あなたは既にそのインデックスパスのセルにいるため、これは起こっています。 –

答えて

0

ビューコントローラを切り替えると、コレクションビューがプログラムでスクロールしないためです。

ただ、これを追加してみてください:

override func viewWillDisappear(_ animated: Bool) { 
    if let indexPath = newAchievementIndexPaths[1] { 
     collectionView.scrollToItem(at: indexPath, at: .bottom, animated: true) 
    } 
} 

このビューコントローラに戻って戻ったときにあなたが戻ってviewDidAppearで、その項目にスクロールするこの方法です。

関連する問題