我的View上有几个按钮,当应用程序启动时,它们应该围绕它们的x轴旋转。当我从Xcode(Build然后运行当前方案)启动应用程序时,它们会翻转,但是当我在iPhone上打开应用程序时,它们不会翻转。
我的ViewController中的viewDidLoad如下所示:
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
model =[[Model alloc] init];
GameView *gameView = [[GameView alloc] initWithTiles];
gameView.controller = self;
self.view = gameView;
[self flipButtons];
}
当我从手机启动应用程序时,为什么按钮不会翻转?
如果您需要其他信息,请告诉我们:)
修改
这是翻转按钮并为每个按钮调用的方法:
- (void)flip:(Color*)color {
int flipDirection = arc4random() % 2;
if(flipDirection == 0) flipDirection = -1;
double duration = 200 + arc4random() % (500 - 200);
duration = duration / 1000;
// Animation
[UIView animateWithDuration:duration
delay:0.0
options:UIViewAnimationOptionCurveEaseInOut | UIViewAnimationOptionAllowUserInteraction
animations:^{
self.layer.transform = CATransform3DMakeRotation(M_PI, 0, flipDirection, 0);
// wait duration /2 and call changeColor
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)((duration / 2) * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self changeColor:color];
});
}
completion:^(BOOL finished) {
self.layer.transform = CATransform3DMakeRotation(M_PI, 0, 0, 0);
}];
}
答案 0 :(得分:2)
viewDidLoad
并不一定意味着视图在屏幕上。您应该使用viewWillAppear:
或viewDidAppear
:
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
model =[[Model alloc] init];
GameView *gameView = [[GameView alloc] initWithTiles];
gameView.controller = self;
self.view = gameView;
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[self flipButtons];
}
viewDidLoad
仅表示视图控制器的视图已被实例化,到那时所有IBOutlet
都已连线。您只应在此处执行其他初始化,并且不得依赖于调用viewDidLoad
或是否多次调用等等(例如,您可以使用self.view = nil
卸载视图控制器的视图它没有superview
,并且在需要时会自动重新加载。
为什么这是必要的:
UIViewController
懒散地加载它view
。当您使用例如UIViewController
实例化initWithNibName:bundle:
时,它不会立即加载笔尖;那会浪费资源。根据{{3}}:
您指定的nib文件不会立即加载。它载入了 第一次访问视图控制器的视图。如果你想 加载nib文件后执行其他初始化 覆盖viewDidLoad方法并在那里执行任务。
所以,当第一次查询视图控制器的view
时,会发生加载(请参阅:Apple's documentation)并发出viewDidLoad
次调用您可以使用所有子视图调整视图并设置IBOutlets
。
加载视图后,视图控制器的状态转换将在此图中描述:
Order of UIViewController initialization and loading
初始状态为disappeared
。