UIScrollView iOS 应用程序中的动画

Posted

技术标签:

【中文标题】UIScrollView iOS 应用程序中的动画【英文标题】:Animation in UIScrollView iOS app 【发布时间】:2013-12-09 14:20:55 【问题描述】:

我正在开发一个 ios 应用程序,我有一个全屏 UIScrollView,顶部有一个 UIImageView,底部有 2 个 UIButton。

当用户滚动时,我想在图像视图上插入动画(可能只是逐渐更改 alpha 参数)。

动画与scrollview相关,例如,如果用户滚动scrollview一半,将只显示一半动画。

我希望我自己解释一下。

我该怎么做?

【问题讨论】:

【参考方案1】:

使用UIScrollViewDelegate scrollViewDidScroll: 方法。

https://developer.apple.com/library/ios/documentation/uikit/reference/uiscrollviewdelegate_protocol/Reference/UIScrollViewDelegate.html#//apple_ref/occ/intfm/UIScrollViewDelegate/scrollViewDidScroll:

但还要检查该委托中的其他方法。

因此,例如,您最终可能会得到类似(或根据您的需要更改):

-(void)scrollViewDidScroll:(UIScrollView*)scrollView 

    float opacity = ( 100 - scrollView.contentOffset.y ) / 100.0; 
    opacity = (opacity < 0? 0 : opacity>1? 1 : opacity);
    imageView.layer.opacity = opacity;


您可能还想向 Apple 工程师自己学习。查看 WWDC 视频,其中有很多:

探索 iOS 7 上的滚动视图(WWDC 2013) 通过滚动视图增强用户体验(WWDC 2012) 高级 ScrollView 技术(WWDC 2011)

【讨论】:

真的很喜欢,就是我要找的。但我在第 1 行有一个错误:二进制表达式(int 和 CGPoint)的操作数无效。我该如何解决? @user3072993 已修复!我错过了 scrollView.contentOffset 示例上的 .y 。如果您更喜欢它,也许您可​​以将其标记为您的答案。 效果很好..谢谢!有没有一种简单的方法来检测用户是向上滚动还是向下滚动?我在委托方法中看不到这一点.. @user3072993 为此,您需要计算每个委托调用之间的增量变化。这也是为什么我建议检查整个委托,而不是一个方法。您必须计算增量,并将其存储在浮点数中(如果只是垂直 y 值),然后比较 (currentOffset.y - previousY) 以查看它是 > 0(向下)还是 【参考方案2】:

实现UIScrollViewDelegate协议并使用该方法

- (void)scrollViewDidScroll:(UIScrollView *)scrollView



在这里,您可以通过调整视图层的不透明度来更改 UIImageView 的 alpha 值:

imageView.layer.opacity = ...

这叫做隐式动画。

【讨论】:

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

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

iOS UIScrollView 动画后的动画

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

带有 uiscrollview 分页的 iOS 渐变动画

UIScrollView 动画到 targetContentOffset 不稳定

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