2016-06-15 14 views
1

NSCollectionViewのscrollToIndexPaths:scrollPosition:をアニメートしようとしていますが、このメッセージがコレクションビューのanimatorプロキシに送信された場合は、ドキュメントに従ってください。しかし、私はそれを働かせることはできません。NSCollectionViewのscrollToIndexPathsをアニメーション化する方法:scrollPosition :?

私はコレクションビューだけを含む非常に簡単なプロジェクトをセットアップし、1000個の100x100個のアイテムを作成しました。単純なアクションでは、表示可能なインデックスのパスを50ずつインクリメントし、それをスクロールしようとします。私のスクロールコードは次のようになります。

- (IBAction)increment:(id)sender { 
    NSIndexPath *visibleIndexPath = [[self.collectionView indexPathsForVisibleItems] anyObject]; 
    NSIndexPath *toIndexPath = [NSIndexPath indexPathForItem:visibleIndexPath.item + 50 inSection:visibleIndexPath.section]; 
    [self.collectionView.animator scrollToItemsAtIndexPaths:[NSSet setWithObject:toIndexPath] scrollPosition:NSCollectionViewScrollPositionCenteredHorizontally]; 
} 

これは、対象インデックスパスにコレクションビューをジャンプしますがアニメーション化されません。私は、スクロールビューは、私はこの上で見つけた他のスレッドの一部に基づいて、あまりにも裏打ちされた層であることを保証しました:

enter image description here

プロジェクト内の他の唯一のコード設定数行ですviewDidLoad:でのコレクションビューおよびフローレイアウト:

// Do any additional setup after loading the view. 
    NSCollectionViewFlowLayout *flowLayout = [[NSCollectionViewFlowLayout alloc] init]; 
    flowLayout.itemSize = CGSizeMake(100.f, 100.f); 
    flowLayout.scrollDirection = NSCollectionViewScrollDirectionHorizontal; 
    self.collectionView.collectionViewLayout = flowLayout; 

    [self.collectionView registerClass:[CollectionViewItem class] forItemWithIdentifier:@"identifier"]; 

誰もがscrollToIndexPaths:scrollPosition:を使用してアニメーション化することができていますか?ドキュメンテーションは明らかに明快ですが、私はそれを働かせることはできません。 https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/#//apple_ref/occ/clm/UIView/animateWithDuration:animations

答えて

3

私は同じ問題に直面し、それを修正するためにしばらく過ごしました。彼らは、不動産変更コードを気にする暗黙のアニメーションの概念を持っています。私。アニメーターは特定のプロパティをアニメーション化しますが、他のレイアウト変更はアニメーション化しないようです。これらの「その他の」変更をアニメートするには、現在のアニメーションコンテキストに暗黙のアニメーションを許可するように設定する必要があります。ここに私の作業コードがあります:

let ctx = NSAnimationContext.current() 
ctx.allowsImplicitAnimation = true 

collectionView.animator().scrollToItemsAtIndexPaths(Set<NSIndexPath>(arrayLiteral: nextPath), scrollPosition: .TrailingEdge) 

注:新しいSwift構文をサポートするようにスニペットを編集しました。

+0

パーフェクト!それがトリックでした。 OS Xのアニメーションについてもっと包括的な知識があれば分かったはずですが、これを指摘したドキュメンテーションのどれも驚いていません。 – ppilone

+0

ああ、私はその愚かな問題について夢中になった。私はここであなたの答えを見つけたことを神に感謝します!驚くばかり! – JFS

-2

は、参照してくださいアニメーションタグで

をごscrollToIndexPaths:scrollPositionを入れてみてください

+0

私はNSCollectionView(UIKitではなく)で作業しています。 – ppilone

関連する問題