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