首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何动画NSCollectionView视图的滚动to :滚动位置:?

如何动画NSCollectionView视图的滚动to :滚动位置:?
EN

Stack Overflow用户
提问于 2016-06-15 15:13:46
回答 3查看 1.2K关注 0票数 1

我正在尝试对NSCollectionView视图的scrollToIndexPaths:scrollPosition:进行动画化,如果将此消息发送到集合视图的animator代理,则可以根据文档实现这一目标。但是,我不能让它起作用。

我已经设置了一个非常简单的项目,它只包含一个集合视图,并创建了1000100x100项。一个简单的操作会使可见索引路径增加50,并尝试滚动到它。我的滚动代码看起来如下:

代码语言:javascript
复制
- (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];
}

这将集合视图跳转到目标索引路径,但不具有动画。我已经确保滚动视图也是层支持的,基于我在这里找到的其他一些线程:

该项目中唯一的其他代码是在viewDidLoad:中设置集合视图和流布局的几行代码。

代码语言:javascript
复制
  // 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:动画吗?这些文档听起来很明显,但我无法让它起作用。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-06-16 13:57:55

面对同样的问题,我花了一段时间来解决这个问题。他们有一个隐式动画的概念,注意非属性变化的代码。也就是说,看起来像动画师将动画的某些属性,而不是其他布局的变化。要允许这些“其他”更改动画化,您必须将“允许”隐式动画设置为当前动画上下文。这是我的工作代码:

代码语言:javascript
复制
let ctx = NSAnimationContext.current()
ctx.allowsImplicitAnimation = true

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

注意:我编辑了这个片段以支持更新的Swift语法。

票数 10
EN

Stack Overflow用户

发布于 2018-10-02 00:37:05

由于我的应用程序是用ObjectiveC编写的,所以我将上述答案从Swift翻译过来,并在实际代码中进行了测试:

代码语言:javascript
复制
[NSAnimationContext beginGrouping];
[[NSAnimationContext currentContext] setDuration:0.5];
[NSAnimationContext currentContext].allowsImplicitAnimation=YES;
[[myCollectionView animator] scrollToItemsAtIndexPaths:myIndexPathSet scrollPosition:NSCollectionViewScrollPositionNearestHorizontalEdge];
[NSAnimationContext endGrouping];
票数 3
EN

Stack Overflow用户

发布于 2016-06-15 15:41:39

尝试将您的scrollToIndexPaths:scrollPosition放在动画标记中

请参阅:ref/occ/clm/UIView/animateWithDuration:animations

票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37839376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档