gpt4 book ai didi

iphone - UIImageView介绍动画问题

转载 作者:行者123 更新时间:2023-11-29 05:06:51 25 4
gpt4 key购买 nike

我正在尝试为我的 iOS 应用程序创建介绍动画,但遇到了时间问题。我特别想在介绍动画播放后更改屏幕。我目前使用 UIImageView ,但似乎没有办法做到这一点。许多 stackoverflow 问题都说使用 NSTimer 或 PerformSelector:afterDelay 但这些不是准确的计时器,在我的例子中是完全错误的。这就是我正在做的事情。

  1. 将 UILaunchImageFile 设置为 LaunchImage.png
  2. AppDelegate 分配一个 IntroViewController
  3. IntroViewController.LoadView 分配 IntroView
  4. IntroView.initWithFrame 执行以下操作 UIImageView* iv = iv.animationImages = iv.animationDuration = 2.0 iv.animationRepeatCount = 1 [iv 开始动画]
  5. 设置 NSTimer/performSelector:afterDelay?
  6. 当计时器触发器从 IntroViewController 更改为其他触发器时。

如果我执行步骤 5 或 6,它将无法正常工作。它确实正确地播放了动画,并且会正确地更改 View / View Controller ,但时间却非常错误。当您以这种方式调用 startAnimating 时,它实际上可能不会在一两秒内启动动画。我想是因为该应用程序仍在以某种方式加载资源。然而,这个时间在模拟器或所有设备上并不一致。事实上,在同一设备上多次运行可能会产生不同的结果。因此我不能硬编码一些延迟。

我想做的就是检测 UIImageView 动画已播放最后一帧并执行某些操作。就是这样。到目前为止我发现的最好的解决方案是以某种方式设置一个计时器,然后做一些事情,但在我的情况下,计时器不是一个解决方案。

有什么想法吗?

最佳答案

您观察到的长时间延迟是由于读取和解码图像造成的,这是 UIImageView 在动画开始之前执行的操作。

核心动画为您执行动画,并在渲染服务器中进行绘制,这是在一个单独的进程中。请记住,您在屏幕上看到的内容并不一定代表您的应用程序的图层树的即时图片:Core Animation Rendering Architecture .

UIImageView 不提供为您提供准确结果的工具。我建议:

  1. 创建一个您自己的 UIView
  2. 使用离散计算模式创建一个 CAKeyframeAnimation,并将图像的 CGImageRefs 作为其值。
  3. 将动画的委托(delegate)设置为您的 IntroViewController
  4. 将动画添加到“contents”键的 View 图层。
  5. 完成后,您的 IntroViewController 将会获得animationDidStop:finished:。

不过有两件事需要考虑:

首先,使用电影而不是一系列图像可以获得更好的结果,因为电影可以从存储中流式传输。

其次,更重要的是,该解决方案将改善时序情况,但不会完全缓解它。 animationDidStop:finished: 当您的应用认为动画完成时调用...这不一定是它看起来完成的时间。

如果您不依赖委托(delegate)回调来进行媒体计时,您会做得更好:相反,添加此动画和转换 View 的动画(使用CAAnimationGroup如果需要的话)在运行循环的同一轮中。使用第一个动画持续时间的 beginTime 延迟后者。根据您正在执行的操作,您可能还必须设置第二个动画的填充模式才能在第一个动画期间获得正确的行为。

关于iphone - UIImageView介绍动画问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4671999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com