1

didFinishLaunchingWithOptionsのアニメーションでビューをダイアプレイしたいだけです。私のコードは次のようになります。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    CGRect finalRect = CGRectMake(0, 0, [[UIScreen mainScreen] bounds].size.width, [[UIScreen mainScreen] bounds].size.height);

    UIImage *image = [UIImage imageNamed:@"122.jpg"]; 

    UIButton* pic = [[UIButton alloc] initWithFrame:finalRect];
    [pic setBackgroundImage:image forState:UIControlStateNormal];
    [pic setHidden:true];
    pic.center = CGPointMake(finalRect.size.width / 2, finalRect.size.height / 2);


    UIViewController* controller = [[UIViewController alloc] init];
    [controller setView:pic];

    [self.window setRootViewController:controller];
    [self.window makeKeyAndVisible];


    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:2.5];
    [pic setHidden:false];
    [UIView commitAnimations];

    return YES;
}

しかし、アニメーションはまったく機能しません。突然画面に表示されたばかりの写真付きのサブビュー。しかし、ボタンを使用してアニメーションコードをトリガーすると、ビューは想定どおりにアニメーションで表示されます。didFinishLaunchingWithOptionsに制限はありますか?

PS:

この問題は、rokjarcが以下で説明するように、アニメーションコードをコントローラーのviewDidAppearプロシージャに移動することで解決されます。

しかし、didFinishLaunchingWithOptionsから呼び出される遅延ルーチンでアニメーションコードを実行することで、これを解決する別の解決策があります。

[self performSelector:@selector(executeAnimation) withObject:nil afterDelay:1];
4

1 に答える 1

2

あなたのボタンはあなたの上にcontroller.viewロードされることによって覆われます。window.viewpic

これは、コードをに移動することで解決できますcontroller::viewDidAppear

controller.viewこの方法を選択する場合は、の代わりにボタンを追加することを忘れないでくださいappDelegate.window

このアニメーションはアプリケーションの起動時にのみ表示したいように見えるので、showAnimationというBOOLプロパティをコントローラーに追加するように設定できます。このプロパティをYESindidFinishLaunchingWithOptions:NOの最後にに設定しますcontroller::viewDidAppear

このようにして、条件付きで(if (self.showAnimation)...)目的のアニメーションを1回だけ(で)表示できますcontroller::viewDidAppear

于 2012-05-20T10:21:30.483 に答える