如何禁用NSCollectionView中的动画

时间:2011-03-16 20:25:44

标签: cocoa animation

我想关闭调整NSCollectionView时发生的'shuffle'动画。这可能吗?

5 个答案:

答案 0 :(得分:6)

这样可行,但它正在设置一个私有实例变量,因此在Mac App Store中可能没问题。

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

答案 1 :(得分:3)

对于10.6,我能够通过继承NSView来禁用动画,重写animationForKey:并返回nil。然后确保将该视图用于原型视图。

答案 2 :(得分:3)

kainjow是对的。加上这个:

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

到原型视图子类(不是集合视图!)禁用动画

答案 3 :(得分:1)

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

NSAnimationContext.current.duration = 0

答案 4 :(得分:0)

如果我执行以下操作,我只能使其工作:

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