iOS UIScrollView 动画后的动画

Posted

技术标签:

【中文标题】iOS UIScrollView 动画后的动画【英文标题】:iOS UIScrollView animation after animation 【发布时间】:2013-01-02 09:27:51 【问题描述】:

我想要类似于 Flipboard 在应用启动时轻微翻转动画的目的。 Flipboard 启动时会有轻微的上下翻转,向不熟悉界面的用户表明它是可翻转的。

我有一个 UIScrollView,我想制作一点动画来向用户展示它是可滚动的。所以我想向右滚动一点并返回。 UIScrollView 有一个没有完成子句的setContentOffset:animated: 消息。我发现调用它两次似乎没有动画。如果我想要一个接一个的动画怎么办?

编辑: 感谢李维的回答。 为了记录,我可以使用UIViewAnimationOptionAutoreverseUIViewAnimationOptionRepeat。所以这就是我最终得到的结果。

CGPoint offset = self.scrollView.contentOffset;
CGPoint newOffset = CGPointMake(offset.x+100, offset.y);

[UIView animateWithDuration:0.5 delay:0 options:UIViewAnimationOptionCurveEaseIn | UIViewAnimationOptionAutoreverse |UIViewAnimationOptionRepeat animations:^
    [UIView setAnimationRepeatCount: 2];
    [self.scrollView setContentOffset:newOffset animated: NO];
 completion:^(BOOL finished) 
    [self.scrollView setContentOffset:offset animated:NO];
];

【问题讨论】:

【参考方案1】:

对于滚动视图、表格视图或集合视图,如果您执行以下操作:

[self.collectionView setContentOffset:CGPointMake(self.collectionView.contentOffset.x+260.0,
                                                  self.collectionView.contentOffset.y)
                             animated:YES];

然后你会得到一个:

-(void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView

当滚动结束时。

如果用户移动视图,您不会收到此回调。

【讨论】:

这个(很好的)答案只有在所有 setContentOffset 调用都应该导致相同的函数时才有效。例如,如果仅对 setContentOffset 的某些调用需要“完成”,则需要一些代码杂技来实现这一点。 另外,如果没有动画(例如滚动偏移为0),则不调用scrollViewDidEndScrollingAnimation。【参考方案2】:

两种选择:

1) 使用-(void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView 委托回调

2) 尝试将其放入动画块中(带有... animated:NO];),其中包含完成部分。

【讨论】:

这有效,但动画没有使用我提供的持续时间。它正在使用默认时间。

以上是关于iOS UIScrollView 动画后的动画的主要内容,如果未能解决你的问题,请参考以下文章

IOS。当 UIScrollView 滚动时应用另一个滚动动画[关闭]

UIScrollView iOS 应用程序中的动画

iOS - UICollectionViewCell 内的 UIScrollView - 内部视图的动画不正确(延迟)

带有 uiscrollview 分页的 iOS 渐变动画

iOS之深度剖析UIScrollView的实现原理与阻尼动画

UIScrollView 动画到 targetContentOffset 不稳定