1

在本例中我們使用UICollectionView,但同樣的問題適用於UITableView方法。處理多個單元格選擇和自定義轉換

我們對收藏視圖單元格進行自定義動畫時,它被選中。它將細胞動畫化,然後我們有一個UIViewControllerTransitioningDelegate

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { 

在這個方法中,我們有一些自定義動畫代碼,一旦動畫完成,然後,我們觸發賽格瑞(這是一個自定義轉換)。

問題
的問題是,當你快速選擇兩個單元格動畫出現兩個,然後打亂了過渡/導航欄。

在這種情況下,一次只處理一個動畫的最佳方法是什麼?禁用mutli select不會改變任何東西,因爲理論上我們不會選擇多個,只需快速選擇另一個。

回答

0
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { 
     if (self.cellAnimationInProgress == YES) { 
      return; 
     } 

     dispatch_async(dispatch_get_main_queue(), ^(void) { 
      //Code here is run on the main thread 
      self.cellAnimationInProgress = YES; 
     }); 

我使用了上面建議的類似方法。在動畫輸出過程中,我保留BOOL並更新爲YES。然後,在完成一次返回和動畫時,BOOL被更新回NO,因此忽略第二次敲擊。

0

將您的集合視圖的allowsSelection屬性設置爲NO,位於didSelectItemAtIndexPath;這應該阻止用戶選擇第二個單元格。你可以在viewDidAppear中將它設置爲YES,如果你稍後從你控制的控制器回到同一個集合視圖。

+0

謝謝我最初嘗試過,它不適合我。可能是因爲它沒有在主線程中調用。最後我剛剛添加了一個BOOL,我在更新動畫時更新,返回到NO時返回到控制器並進行動畫製作。我想這是最好的方法嗎? – StuartM 2014-09-03 16:56:58

+0

@StuartM,我不知道這是不是最好的方法。如果您將allowedSelection設置爲NO作爲didSelectItemAtIndexPath中的第一行,則應該在主線程上調用它。不知道你試過什麼,很難進一步評論。 – rdelmar 2014-09-03 17:00:46

相關問題