对NSCollectionViews绑定的阵列控制器进行排序 - >显式动画NSCollectionViewItems框架

时间:2016-08-27 21:38:04

标签: objective-c cocoa core-animation appkit nscollectionview

我有一个NSCollectionView,它通过Interface Builder绑定到NSArrayController。

我提供NSSortDescriptors和NSPredicates来过滤和排序数组(完全有效),但是,由于我依靠NSAnimationContext的隐式动画,我的CALayers要求动画的唯一关键是@“hidden”。我想为框架原点设置动画,以便细胞在视觉上移动到新的位置。

在过去,我使用了集合视图动画属性来执行动画更新和动画插入,删除和移动,这导致触发了@“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];
}

谢谢,任何见解都表示赞赏!

1 个答案:

答案 0 :(得分:0)

如果没有看到Collection View的所有代码和设置,真的很难提供帮助。它可以有不同的样式和布局。一旦更改了绑定的NSArrayController的sortDescriptors,带有“内容数组”布局的集合视图就可以立即激活项目。

我在Swift中为你创建了一个例子(不能做客观的抱歉):

https://github.com/emankovski/AnmatedCollectionSort