在动画之前获取两个 CGPoint 之间的值(uiscrollview)

Posted

技术标签:

【中文标题】在动画之前获取两个 CGPoint 之间的值(uiscrollview)【英文标题】:Get value between two CGPoint before animating (uiscrollview) 【发布时间】:2017-04-25 14:43:20 【问题描述】:

对不起,我的英语不好。

在我的工作中,我们制作了一个将高分辨率图像显示为 UIScrollVIew 的应用程序。此外,用户可以播放 MP3 动画,从一秒开始动画 UIScrollView 的位置和缩放,并在特定的持续时间内显示 MP3 正在谈论的图像的细节。目前,音频从第 0 秒开始依次播放到结束。播放 MP3 时用户无法与 UIScrollView 交互

现在我们希望用户可以在播放时更改当前时间,我不确定当用户选择放置在一个动画中间的第二个时如何计算位置。

例子:

第二个 1:持续时间 4;秒 8:持续时间 2;第二个 20 持续时间 10;第二个 31 持续时间 3;

如果用户选择第二个 24,我们希望在 6 秒内进行动画处理,但请记住 UIScrollView 从原始动画的第二个 20 到 24 应该具有的原始位置。

我们在 UIScrollView 中使用带有 zoomToRect (animated:NO) 方法的 uiview 动画 (animateWithDuration)

我不确定如何计算这些中间值。

谢谢。

【问题讨论】:

【参考方案1】:

我不知道我是否真的理解你的正确或错误。但是您可以将动画进度设置为与动画的起点和总持续时间相关的进度值。 IE。在你的情况下

float animationStartPoint = 20.0; // Start of the animation
float duration = 10.0;            // Its duration
float partialStartPoint = 24.0;   // user selected start point

NSAnimation *animation = …;
…
animation.currentProgress = (partialStartPoint-animationStartPoint)/duration;
[animation startAnimation];

【讨论】:

感谢回复,但我认为 NSAnimation 是 MacOS 独有的,在 ios 框架中不存在。 哦,不好意思,没注意。

以上是关于在动画之前获取两个 CGPoint 之间的值(uiscrollview)的主要内容,如果未能解决你的问题,请参考以下文章

动效设计Principle:动画介绍

通过添加两个 CGPoints 的距离来找到 CGPoint

flutter-动画

有办法在两个 viewController 之间共享 UI 元素吗?

ImageView 动画重复

比较 CGPoint 和图像中心属性