我希望关闭 NSCollectionView 调整大小时发生的“洗牌”动画。这是否可行?
这段代码可以工作,但它设置了一个私有实例变量,可能不适用于Mac App Store。
[collectionView setValue:@(0) forKey:@"_animationDuration"];
- (id) animationForKey:(NSString *) key
{
return nil;
}
对于原型视图子类(不是集合视图!)禁用动画效果
对于10.6版本,我能够通过子类化NSView、覆盖animationForKey:方法并返回nil来禁用动画。然后确保您在原型的视图中使用该视图。
如需在Swift中禁用所有集合视图的动画,请在可动画之前执行以下操作:
NSAnimationContext.current.duration = 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()
}