2016-08-27 2 views
2

私はInterface Builderを介してNSArrayControllerにバインドされたNSCollectionViewを持っています。NSCollectionViewsをソートする配列コントローラ - > NSCollectionViewItemsフレームを明示的にアニメーション化

私はNSAnimationContextを介して暗黙のアニメーションに依存しているので、私のCALayersがアニメーション化することが要求されている唯一のキーは@ "隠されている"ため、配列をフィルタリングしてソートするためにNSSortDescriptorsとNSPredicatesを提供します。フレーム原点をアニメートして、セルが視覚的に新しい位置に移動するようにしたいと思います。

私はこれまでコレクションビューのアニメータープロパティを使用してperformBatchUpdateを行い、挿入、削除、移動をアニメーション化し、結果として@ "frameOrigin"アニメーションがトリガーされました。それはバインドを使用してそのように動作するようですか?

NSCollectionViewをバインドしてArrayControllerにソートまたはフィルタを指定すると、明示的なフレームアニメーションが強制的に適用されますか?ここで

は、参考のために、私の現在のソートコードです:

- (void) setupSortUsingSortDescriptor:(NSSortDescriptor*) sortDescriptor selectedItem:(SynopsisMetadataItem*)item 
{ 
    NSAnimationContext.currentContext.allowsImplicitAnimation = YES; 
    NSAnimationContext.currentContext.duration = 0.5; 
    [NSAnimationContext beginGrouping]; 

    self.resultsArrayControler.sortDescriptors = @[sortDescriptor]; 

    [self updateStatusLabel]; 

    if(item != nil) 
    { 
     NSUInteger index = [self.resultsArrayControler.arrangedObjects indexOfObject:item]; 
     if(index != NSNotFound) 
     { 
      NSIndexPath* newItem = [NSIndexPath indexPathForItem:index inSection:0]; 

      NSSet* newItemSet = [NSSet setWithCollectionViewIndexPath:newItem]; 

      [self.resultsArrayControler setSelectionIndex:index]; 

      [self.collectionView.animator scrollToItemsAtIndexPaths:newItemSet scrollPosition:NSCollectionViewScrollPositionCenteredVertically]; 
     }  
    } 
    [NSAnimationContext endGrouping]; 
} 

おかげで、任意の洞察力が高く評価されます!

答えて

0

コレクションビューのすべてのコードと設定が表示されない限り、実際には助けがありません。それは異なるスタイルとレイアウトを持つことができます。バインディングされたNSArrayControllerのsortDescriptorsを変更するとすぐに、「コンテンツ配列」レイアウトを使用したコレクションビューでアイテムをすぐにアニメーション化します。

私は(Objective-Cの申し訳ありませんが行うことはできません)・スウィフトにあなたのための例を作成しました:

https://github.com/emankovski/AnmatedCollectionSort

関連する問題