iOS UIScrollView 动画后的动画
Posted
技术标签:
【中文标题】iOS UIScrollView 动画后的动画【英文标题】:iOS UIScrollView animation after animation 【发布时间】:2013-01-02 09:27:51 【问题描述】:我想要类似于 Flipboard 在应用启动时轻微翻转动画的目的。 Flipboard 启动时会有轻微的上下翻转,向不熟悉界面的用户表明它是可翻转的。
我有一个 UIScrollView,我想制作一点动画来向用户展示它是可滚动的。所以我想向右滚动一点并返回。 UIScrollView 有一个没有完成子句的setContentOffset:animated:
消息。我发现调用它两次似乎没有动画。如果我想要一个接一个的动画怎么办?
编辑:
感谢李维的回答。
为了记录,我可以使用UIViewAnimationOptionAutoreverse
和UIViewAnimationOptionRepeat
。所以这就是我最终得到的结果。
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 滚动时应用另一个滚动动画[关闭]
iOS - UICollectionViewCell 内的 UIScrollView - 内部视图的动画不正确(延迟)