0

我有一个控制器,它使用动画 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:调用之后有 2 秒的延迟viewDidAppear:(在 MARKER_001 和 MARKER_002 之间)。

我在想可能会延迟设置帧NSArray或在调用之后setAnimationImages:或之后startAnimating

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

4

2 回答 2

2

只是一些想法:

  1. 减轻疼痛 - 你需要 30x512x512 吗?
  2. 分配痛苦 - 在 vi​​ewWillAppear 上加载第一个图像,启动一个操作以加载其他图像并在新图像准备好时更新动画图像(例如,如果需要,可以提供代码)
  3. 移动痛苦 - 在应用程序初始化中准备 UIImages 数组。
  4. 深入挖掘 - 让我们看看 framesForLoop 方法,也许还有更多的机会来减少/分散/移动那里的痛苦。
于 2012-05-01T17:59:37.687 回答
0

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

你应该打电话startAnimatingviewDidAppear代替。

这两种方法之间的两秒延迟并不奇怪。延迟可能更长或更短,具体取决于应用程序内部发生的情况。测量两种未连接的方法之间的时间是没有意义的。测量各个方法需要多少时间呢?

如果有任何延迟,您可能应该粘贴在用户操作与显示所有内容和延迟发生的那一刻之间发生的所有代码。

于 2012-05-01T17:11:57.530 回答