我正在尝试制作一个动画 - 对用户可见 - 在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上)......
答案 0 :(得分:2)
我认为这都是关于应用程序循环的,当你在断点上时,你将无法看到视图。确实如此,viewDidAppear在视图可见时被调用,但在将它与代码brakpoints一起使用时则不会被调用。
答案 1 :(得分:1)
正如用户1851930所说,运行循环被你的断点'停止'并且绘图还没有发生。 如果你需要发生一次,将动画延迟0.0f(循环的一次迭代)
使用:
- (void)viewDidAppear {
[self performSelector:@selector(delayedAppear) withObject:nil afterDelay:0.0f];
}
- (void)delayedAppear {
//view has been drawn
// do stuff
}