【问题标题】:How to play an opening animation when iOS app launchesiOS应用启动时如何播放开场动画
【发布时间】:2012-08-09 21:14:39
【问题描述】:

我正在尝试让代码正确,以便在我在 xcode 中创建的 iphone 应用程序上播放开场动画。我希望它仅在应用程序启动时播放(如愤怒的小鸟),而不是每次我返回主页时播放。我已经尝试了几件事,但似乎没有任何工作正常。有人能告诉我如何正确地做到这一点吗?

我正在使用一系列图像来创建动画。

我尝试将来自 geeky lemon 教程 (http://www.youtube.com/watch?v=5AbdZ-8JBZQ) 的动画代码放入 viewDidLoad。这确实可以播放动画,但每次我回到主页时,动画都会播放。我不希望在返回主页时播放动画,只是在应用启动时播放。

我还尝试添加另一个视图,它是应用程序启动时的第一个视图,并在 viewDidLoad 中播放动画,然后在动画完成后使用执行选择器转到主页(使用 after Delay 部分完成)。这也有效并且确实播放动画并且当我返回主屏幕时不播放但是这会导致导致应用程序崩溃的一些错误。我已将 NSLogs 放在 viewDidLoad 部分中,因此我可以看到页面正在运行,有时当我在应用程序中播放时,它会说正在调用我的打开动画 viewDidLoad。所以我认为这与崩溃有关。当我取出这个视图并直接进入主视图时,它不会崩溃。

我也尝试将它放在应用程序委托中,但我根本无法让它工作。

请帮忙,这让我发疯了,我不知道出了什么问题。我知道它可以工作愤怒的小鸟和其他人非常成功地做到这一点。

如果有更好的方法?

【问题讨论】:

    标签: iphone image animation launch


    【解决方案1】:

    试试这个:

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        [self.window makeKeyAndVisible];
    
        UIImageView *imageView =[[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
        imageView.animationImages = [NSArray arrayWithObjects:
                                     [UIImage imageNamed:@"myImage1.png"], [UIImage imageNamed:@"myImage2.png"], [UIImage imageNamed:@"myImage3.png"], [UIImage imageNamed:@"myImage4.png"], [UIImage imageNamed:@"myImage5.png"], [UIImage imageNamed:@"myImage6.png"], nil];
    
    
        imageView.animationDuration = 0.5;
        imageView.animationRepeatCount = 3;
        [imageView startAnimating];
        [self.window addSubview:imageView];
    
        return YES;
    }
    

    为您添加动画作为子视图self.window

    【讨论】:

      【解决方案2】:

      您需要将它包含在您的应用委托的 - (void)applicationWillEnterForeground:(UIApplication *)application 方法中,仅当您的应用“启动”时才会调用此方法。

      【讨论】:

      • 没有。每次启动时都会调用这不是 OP 想要的。
      • Kyle 感谢您的帮助。
      【解决方案3】:

      把你的动画方法放进去

      - (BOOL)application:(UIApplication *)app didFinishLaunchingWithOptions:(NSDictionary *)opts
      

      方法。使用为动画指定的单独视图。将其添加到应用程序的关键窗口中,并在动画结束时将其移除。

      【讨论】:

      • 你是说把它放在应用程序委托中吗?这就是我试图做的,但我的代码都没有工作。它要么根本不播放,要么实际上不播放动画(这是动画在它自己的视图上)。 “应用程序的关键窗口”是什么意思?您是否可以指出一些示例代码,我还很新,只是无法弄清楚如何正确执行此操作。
      • @user1588717 你一定搞砸了,我以前做过。我的意思是[UIApplication sharedApplication].keyWindow
      【解决方案4】:

      或者你也可以放进去

      -(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

      我有一个视图控制器并在其中加载视图。从那里调用它。

      如果您的动画在单个视图中,您可以让该动画在单独的线程上运行,并在主线程上休眠。

      (void)applicationDidFinishLaunching:(UIApplication *)application {
      // 添加子视图

      [窗口 addSubview:animationController.view];
      // 一段时间后做另一件事
      [self performSelector:@selector(firstcontroller) withObject:nil afterDelay:5];
      [窗口 makeKeyAndVisible]; }

      -(void)firstcontroller{
      [窗口 addSubview:firstControllerAfterLaunch.view];
      }

      【讨论】:

      • 对不起,我是个新手,真的不明白你的意思。你能再解释一下吗?谢谢。
      • 在您的应用委托中有我在上面发布的这种方法。在那里你调用你的视图控制器。如果它是后台线程中的动画,那么您需要在其中有一个“睡眠”命令以使您的主线程睡眠,否则您的其他视图将被加载。如果没有使用线程,那么您可以加载自己的视图控制器
      • 如果我只使用一个线程,我该怎么做?我不知道如何处理多个线程。
      • 如果你不使用多个线程,那么你只需要调用处理动画的视图控制器。
      • 好的...你知道我可以在哪里查看一些示例代码吗?我已经尝试在应用程序委托中进行编码,但它不适合我。它根本不工作或动画不播放。
      【解决方案5】:

      尝试使用 dispatch_once 将动画代码放入 viewDidAppear。这样,您将确保在应用程序的生命周期内只调用一次动画。

      【讨论】:

      • 我对 dispatch_once 不是很熟悉。我查看了 Apple 的文档,上面写着“在应用程序的生命周期内只执行一次块对象”。好像它只会播放一次。我希望它在应用程序打开时每次(或几乎每次)播放我只是不希望它在用户返回主页时播放。如果我误解了 Apple 文档的内容,请告诉我。谢谢。
      猜你喜欢
      • 1970-01-01
      • 2022-01-14
      • 1970-01-01
      • 1970-01-01
      • 2012-06-06
      • 1970-01-01
      • 1970-01-01
      • 2013-09-09
      • 1970-01-01
      相关资源
      最近更新 更多