Cocoa 如何在NSCollectionView中禁用动画

Cocoa 如何在NSCollectionView中禁用动画,cocoa,animation,Cocoa,Animation,我想关闭调整NSCollectionView大小时发生的“随机”动画。这可能吗?对于10.6,我可以通过子类化NSView、覆盖animationForKey:并返回nil来禁用动画。然后确保将该视图用于原型的视图。这是可行的,但它设置了一个私有实例变量,因此在Mac App Store中可能不正常 [collectionView setValue:@(0) forKey:@"_animationDuration"]; kainjow是正确的。添加以下内容: - (id) animationF

我想关闭调整NSCollectionView大小时发生的“随机”动画。这可能吗?

对于10.6,我可以通过子类化NSView、覆盖animationForKey:并返回nil来禁用动画。然后确保将该视图用于原型的视图。

这是可行的,但它设置了一个私有实例变量,因此在Mac App Store中可能不正常

[collectionView setValue:@(0) forKey:@"_animationDuration"];

kainjow是正确的。添加以下内容:

- (id) animationForKey:(NSString *) key
{
    return nil;
}

对于prototype view子类(而不是collection view!),禁用动画

只有执行以下操作,我才能使其正常工作:

1) 为NSCollectionViewItem用作其视图的视图创建子类。该子类视图需要CALayer,我将视图子类设置为CALayer的委托

2) 实现CALayer委托方法,以便不发生动画操作:

override func actionForLayer(layer: CALayer, forKey event: String) -> CAAction? {
        return NSNull()
}
3) 最后,在NSCollectionView数据源方法中:

func collectionView(collectionView: NSCollectionView, itemForRepresentedObjectAtIndexPath indexPath: NSIndexPath) -> NSCollectionViewItem {

    // get a new collection view item
    ....

    // disable animations
    CATransaction.begin()
    CATransaction.setDisableActions(true)

    // populate your cell
    ....

    CATransaction.commit()    
}

要在Swift中禁用所有集合视图的动画,请在可设置动画的事件发生之前执行此操作:

NSAnimationContext.current.duration = 0

animationForKey:在CALayer上,不是NSView吗?它是NSView所遵循的NSAnimatablePropertyContainer协议的一部分。animationForKey不会在我的NSCollectionView的类子类上被调用。我也无法使此技术起作用,因此较长的解释或示例会有所帮助。现在我正在按照Padraig的建议更改私人ivar。这方面有进展吗?有相同的问题,不需要私有API.genius解决方案