2011-03-16 57 views

回答

3

對於10.6,我可以通過繼承NSView,重載animationForKey:和返回nil來禁用動畫。然後確保您使用該視圖作爲原型的視圖。

+0

不是animationForKey:在CALayer上,不是NSView? – 2012-02-14 21:20:18

+0

它是NSView符合的NSAnimatablePropertyContainer協議的一部分。 – kainjow 2012-09-21 21:19:52

+0

animationForKey不會在我的NSCollectionView的類子類上調用。 – voidref 2013-05-23 22:14:37

7

這可以工作,但它設置了一個私有實例變量,因此它可能在Mac App Store中沒有問題。

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

kainjow是正確的。加入這樣的:(!不是集合視圖)

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

原型視圖子類禁用動畫

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

禁用所有集合視圖的動畫在Swift中,在動畫發生之前就做這件事:

NSAnimationContext.current.duration = 0 
+1

天才解決方案 – sumesh 2017-09-07 18:00:20