【问题标题】:View is not shown before viewDidAppear called? When is the view shown?在调用 viewDidAppear 之前不显示视图?什么时候显示视图?
【发布时间】:2012-11-25 22:15:35
【问题描述】:

我正在尝试在 iOS 屏幕上出现视图之后立即制作动画——对用户可见。我原以为我可以把它放在 viewDidAppear 中;文档听起来像是在视图可见后立即调用它。但是,情况似乎并非如此—— viewDidAppear 在视图实际可见之前被调用。视图是以编程方式创建的,而不是从 nib 中创建的。这是一个抽象的例子:

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 上)...

【问题讨论】:

    标签: ios iphone-sdk-3.0


    【解决方案1】:

    我认为这全都与应用程序循环有关,当您处于该断点时,您将无法看到视图。确实,viewDidAppear 在视图可见时被调用,但在与代码断点一起使用时不会被调用。

    【讨论】:

    • 100% 正确。 viewDidAppear 在调用 [self.window.rootView addSubview:newVC.view] 时被调用。不过,当时还没有进行绘图(当然,除非它看起来是动画的)
    【解决方案2】:

    正如用户 1851930 所说,运行循环被您的断点“停止”并且绘图还没有发生。 如果您需要这种情况发生一次,请将动画延迟 0.0f(循环的一次迭代)

    使用:

    - (void)viewDidAppear {
        [self performSelector:@selector(delayedAppear) withObject:nil afterDelay:0.0f];
    }
    
    - (void)delayedAppear {
        //view has been drawn 
        // do stuff
    }
    

    【讨论】:

    • 这成功了。谢谢您的帮助;我不认为我自己会得出这个结论。这是一个常见的技巧吗?想想我玩过的那些显示闪屏之类的游戏……他们是否使用类似的方法来确保闪屏在一段时间内可见?
    • 方法显然应该命名为viewIsJustAboutTo_WaitForIt__WaitForIt__Appear:
    猜你喜欢
    • 2011-08-16
    • 1970-01-01
    • 2012-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多