gpt4 book ai didi

ios - 从 Xcode 启动应用程序和从设备启动应用程序有区别吗?

转载 作者:行者123 更新时间:2023-11-28 21:36:14 27 4
gpt4 key购买 nike

我的 View 上有几个按钮,当应用程序启动时,它们应该围绕 x 轴翻转。当我从 Xcode 启动应用程序(构建然后运行当前方案)时,它们会翻转,但当我在 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);
}];

最佳答案

viewDidLoad 并不一定意味着 View 在屏幕上。您应该使用 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 仅表示 View Controller 的 View 已实例化,此时所有 IBOutlet 已连接。你应该只在这里做额外的初始化,并且不能依赖于何时调用 viewDidLoad 或者它是否被多次调用等(例如,你可以使用 self.view = 卸载你的 View Controller 的 View nil 如果它没有 superview,它会在需要时自动重新加载)。

为什么这是必要的:UIViewController 延迟加载它的 view。当您使用例如 initWithNibName:bundle: 实例化 UIViewController 时,它不会立即加载 Nib ;那将是一种资源浪费。根据Apple's documentation :

The nib file you specify is not loaded right away. It is loaded the first time the view controller's view is accessed. If you want to perform additional initialization after the nib file is loaded, override the viewDidLoad method and perform your tasks there.

所以发生的事情是,当 View Controller 的 view 第一次被查询时,加载发生(参见:Order of UIViewController initialization and loading)并且发出 viewDidLoad 调用您可以使用所有 subview 和 IBOutlets 设置对 View 进行调整。

加载 View 后, View Controller 的状态转换如下图所示:

enter image description here

初始状态是消失

关于ios - 从 Xcode 启动应用程序和从设备启动应用程序有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33827805/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com