1

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

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

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

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

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

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

如果有更好的方法?

4

5 回答 5

6

尝试这个:

- (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

于 2013-11-11T17:51:40.783 回答
0

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

于 2012-08-09T21:17:46.993 回答
0

或者你也可以把它放进去

-(BOOL)应用程序:(UIApplication *)应用程序didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

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

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

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

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

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

于 2012-08-09T21:19:31.190 回答
0

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

于 2012-08-10T00:35:15.460 回答
0

将您的动画方法放入

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

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

于 2012-08-09T21:20:19.923 回答