2016-08-27 11 views
2

У меня есть NSCollectionView, связанный с NSArrayController через Interface Builder.Сортировка NSCollectionViews связанный контроллер массива -> Явно оживить кадр NSCollectionViewItems

Я предоставляю NSSortDescriptors и NSPredicates для фильтрации и сортировки массива (который полностью работает), однако, поскольку я полагаюсь на неявную анимацию через NSAnimationContext, единственный ключ, который запрашивает мой CALayers для анимации, @ «скрыт». Я хотел бы оживить происхождение кадра, чтобы ячейки визуально переместились на новые позиции.

Раньше я использовал свойство анимации вида коллекции для выполнения вставки и удаления анимации и удаления анимации, что приводило к срабатыванию анимации @ «frameOrigin». Кажется, он не работает так, используя привязки?

Возможно ли это при указании сортировки или фильтра на ArrayController, который поддерживает мой NSCollectionView через привязку, чтобы принудительно использовать анимацию фреймов на своих элементах?

Вот мой текущий код сортировки, для справки:

- (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

Это действительно сложно, если не увидеть весь код и настройки для Collection View. Он может иметь разные стили и макет. Collection View с макетом «content array» анимирует элементы из коробки, как только вы меняете sortDescriptors связанного NSArrayController.

Я создал пример для вас в Swift (не может сделать Objective-C извините):

https://github.com/emankovski/AnmatedCollectionSort