2

iOSでビューが画面に表示された直後に、ユーザーに表示されるアニメーションを実行しようとしています。これをviewDidAppearに入れることができると思っていました。ドキュメントでは、ビューが表示された直後にこれが呼び出されるように聞こえます。ただし、そうではないようです。ビューが実際に表示される前に、viewDidAppearが呼び出されています。ビューは、ペン先からではなく、プログラムで作成されます。抽象化された例を次に示します。

sampleviewcontroller.m
@implementation sampleViewController
// Implement loadView to create a view hierarchy programmatically, without using a nib.
- (void)loadView {

    // setup a generic view 
    self.view = [[UIView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame];
    self.view.backgroundColor = [UIColor blueColor];
}    

// View should be shown by now?
- (void)viewDidAppear:(BOOL)animated {

    [super viewDidAppear:animated];
    return; // set breakpoint here, but view is NOT visible in simulator at this point
}

これにより、真っ青なビューが作成されます。ただし、viewDidAppearの戻り行にブレークポイントを設定すると、ブレークポイントに到達したときにその青いビューは表示されません。後で表示されるようになります。

これは期待されていますか?ビューが実際にユーザーに表示されるのはいつですか?App Delegateコードは、ストックpregenのものです:

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

    // Override point for customization after app launch    
    [window addSubview:viewController.view];
    [window makeKeyAndVisible];

    return YES;
}

それが重要な場合は、古いSDK(Snow Leopard上)を使用しています...

4

2 に答える 2

2

アプリケーションループがすべてだと思います。そのブレークポイントにいる間はビューを見ることができません。確かに、viewDidAppear はビューが表示されているときに呼び出されますが、コード ブレークポイントで使用するときは呼び出されません。

于 2012-11-25T22:41:19.143 に答える
1

user1851930 が言ったように、実行ループはブレークポイントで「停止」され、描画はまだ行われていません。これを 1 回行う必要がある場合は、アニメーションを 0.0f 遅らせます (ループの 1 回の反復)。

使用する:

- (void)viewDidAppear {
    [self performSelector:@selector(delayedAppear) withObject:nil afterDelay:0.0f];
}

- (void)delayedAppear {
    //view has been drawn 
    // do stuff
}
于 2012-11-25T22:51:11.357 に答える