我想关闭调整NSCollectionView时发生的'shuffle'动画。这可能吗?
答案 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()
}