使用动画UIImageView在viewDidLoad和viewDidAppear之间延迟

时间:2012-05-01 16:40:54

标签: iphone objective-c cocoa-touch

我有一个控制器,它使用动画UIImageView来显示30 512 x 512帧的序列。当我运行应用程序时,视图会快速执行以下操作。

- (void)viewDidLoad {
    [super viewDidLoad];
    [[self imageView] setAnimationImages:[[self dataModel] framesForLOOP]];
    [[self imageView] setAnimationDuration:2.5];
    [[self imageView] setAnimationRepeatCount:1];
    [[self imageView] startAnimating];
    NSLog(@"MARKER_001");
}

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    NSLog(@"MARKER_002");
}

这一切都运行正常,但我想要解决的是,在viewDidLoad:被调用之后,viewDidAppear:被调用之前有2秒的延迟(在MARKER_001和MARKER_002之间)。

我原以为可能会延迟设置框架NSArray或调用setAnimationImages:后或startAnimating之后。

无论如何减少/消除这种延迟,我宁愿在启动时预加载动画并在那里点击,而不是在viewController加载时有延迟,因为它使触发segue的按钮实例化新控制器感到迟钝。

2 个答案:

答案 0 :(得分:2)

只是一些想法:

  1. 减轻疼痛 - 你需要30x512x512吗?
  2. 分配痛苦 - 在viewWillAppear上加载第一个图像,启动操作以加载其他图像并在新图像准备就绪时更新动画图像(可以提供代码,例如,如果需要)
  3. 移动痛苦 - 在app init中准备UIImages数组。
  4. 深入挖掘 - 让我们看看framesForLoop方法,也许还有更多机会减少/分配/移动那里的痛苦。

答案 1 :(得分:0)

请注意,即使您在startAnimating中呼叫viewDidLoad,动画也不会从那里开始。您无法在尚未显示的控制器中运行动画。

您应该拨打startAnimating中的viewDidAppear

这两种方法之间延迟两秒并不奇怪。延迟可以更长或更短,具体取决于应用程序内部发生的情况。 测量两个没有连接的方法之间的时间是没有意义的。如何衡量单个方法花费的时间?

如果出现任何问题,您应该粘贴用户操作之间发生的所有代码以及显示所有内容并发生延迟的时刻。

相关问题