保持视图在导航控制器中的所有视图后面持久化的最佳方法

ric*_*h.e 3 iphone background uinavigationcontroller

并提前感谢.

我正在寻找有关如何在我的应用程序中布局视图控制器的建议,我仍然有一个持久的背景和一些背景动画

这是它目前的设置方式:

  • AppDelegate创建一个导航控制器,RootViewController和一个Sprite Layer(它是UIView的子类)
  • AppDelegate还将背景图像保存为backgroundColor属性
  • 正常情况下,使用根视图控制器初始化导航控制器
  • rootview控制器将不同的表视图推送到导航堆栈

在代码中:

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

UIImageView* backgroundView = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"underthesea.jpg"]] autorelease];
backgroundView.contentMode = UIViewContentModeScaleAspectFill;
backgroundView.frame = [UIScreen mainScreen].bounds;

self.viewController = [[[RootViewController alloc] init] autorelease];
self.navigationController = [[UINavigationController alloc] initWithRootViewController:self.viewController];
self.spriteLayer = [[[SpriteLayer alloc] initWithFrame:self.viewController.view.frame] autorelease];
self.viewController.spriteLayer = self.spriteLayer;

[window addSubview:backgroundView];    
[window addSubview:self.spriteLayer];
[window addSubview:self.navigationController.view];

[window makeKeyAndVisible];
return YES;
}
Run Code Online (Sandbox Code Playgroud)

`

Sprite Layer一直在后台可见,包含不同的动画.问题是,现在我正在尝试实现autorisizing并遇到困难,因为sprite层中的视图不在UIViewController中.

我认为一种可能性是使SpriteLayer子类为UIViewController,但不要将它放在导航控制器中; 它只会存在于导航控制器正在显示的任何视图后面.我不知道是否同时拥有2个视图控制器,这将是错误的来源或只是糟糕的设计,因为我已经在StackOverflow上读到这不是视图控制器的预期设计.

有什么意见吗?

干杯,里奇

PS我在代码块中放置一个客观的C方法时遇到问题.后面的勾号似乎不起作用,因为代码字体中唯一的代码部分是缩进的.有人知道这样做的正确方法吗?再次感谢.

ric*_*h.e 5

Bentford,我没想过将SpriteLayer视图直接添加到UINavigation视图中,因为我认为这不是UINavigation的预期用途.但它就像一个魅力:)

我不得不改变的是:

[window addSubview:backgroundView];    
[window addSubview:self.spriteLayer];
[window addSubview:self.navigationController.view];
Run Code Online (Sandbox Code Playgroud)

至:

[self.navigationController.view insertSubview:backgroundView atIndex:0];
[self.navigationController.view insertSubview:self.spriteLayer atIndex:1];
[window addSubview:self.navigationController.view];
Run Code Online (Sandbox Code Playgroud)

然后添加一些autoresizeMask到backgroundView和poof我有一个自动调整背景+精灵,当视图控制器被推入导航堆栈时没有git刷出.

谢谢你的建议!