2016-08-27 1 views
2

Ich habe eine NSCollectionView, die über Interface Builder an einen NSArrayController gebunden ist.Sortierung NSCollectionViews gebunden Array Controller -> Explizit animieren NSCollectionViewItems Frame

Ich stelle NSSortDescriptors und NSPredicates zur Verfügung, um das Array zu filtern und zu sortieren (was völlig funktioniert), da ich jedoch auf die implizite Animation über NSAnimationContext angewiesen bin, ist der einzige Schlüssel, den meine CALayers animieren soll, @ "versteckt". Ich möchte den Frame-Ursprung animieren, damit die Zellen sich visuell an ihre neuen Positionen bewegen.

In der Vergangenheit habe ich die animator -Eigenschaft der Auflistungsansicht verwendet, um performBatchUpdate und animiert Insertionen, Löschungen und Bewegungen zu animieren, die in @ "frameOrigin" Animationen ausgelöst werden. Mit Bindungen scheint das nicht zu funktionieren.

Ist es möglich, wenn eine Sortierung oder ein Filter auf dem ArrayController, der meine NSCollectionView durch Bindung unterstützt, eine explizite Rahmenanimation auf seinen Elementen zu erzwingen?

Hier ist mein aktueller Sortiercode, Referenz:

- (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]; 
} 

Dank ist jede Einsicht zu schätzen!

Antwort

0

Es ist wirklich schwer zu helfen, ohne den gesamten Code und die Einstellungen für Collection View zu sehen. Es könnte verschiedene Stile und Layout haben. Collection View mit dem Layout "content array" animiert Objekte sofort nach dem Ändern von sortDescriptors von gebundenem NSArrayController.

habe ich ein Beispiel für Sie in Swift (kann Objective-C nicht sorry):

https://github.com/emankovski/AnmatedCollectionSort