簡體   English   中英

保持視圖在導航控制器中的所有視圖后面持久化的最佳方法

[英]Best way to keep a view persistent behind all views in Navigation Controller

並提前感謝。

我正在尋找有關如何在我的應用程序中布局視圖控制器的建議,我仍然有一個持久的背景和一些背景動畫

這是它目前的設置方式:

  • 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;
}

`

Sprite Layer一直在后台可見,包含不同的動畫。 問題是,現在我正在嘗試實現autorisizing並遇到困難,因為sprite層中的視圖不在UIViewController中。

我認為一種可能性是使SpriteLayer子類為UIViewController,但不要將它放在導航控制器中; 它只會存在於導航控制器正在顯示的任何視圖后面。 我不知道是否同時擁有2個視圖控制器,這將是錯誤的來源或只是糟糕的設計,因為我已經在StackOverflow上讀到這不是視圖控制器的預期設計。

有什么意見嗎?

干杯,里奇

PS我在代碼塊中放置一個客觀的C方法時遇到問題。 后面的勾號似乎不起作用,因為代碼字體中唯一的代碼部分是縮進的。 有人知道這樣做的正確方法嗎? 再次感謝。

Bentford,我沒想過將SpriteLayer視圖直接添加到UINavigation視圖中,因為我認為這不是UINavigation的預期用途。 但它就像一個魅力:)

我不得不改變的是:

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

至:

[self.navigationController.view insertSubview:backgroundView atIndex:0];
[self.navigationController.view insertSubview:self.spriteLayer atIndex:1];
[window addSubview:self.navigationController.view];

然后添加一些autoresizeMask到backgroundView和poof我有一個自動調整背景+精靈,當視圖控制器被推入導航堆棧時沒有git刷出。

謝謝你的建議!

不要使用多個視圖控制器。 相反,讓SpriteLayer子類UIView並將其直接添加到當前可見的UIViewController視圖中。

請記住,只有可見的UIViewController才會觸發旋轉事件。 但是通過這種方式設置SpriteLayer,您可以使用自動調整大小或在didRotateToInterfaceOrientation手動調整大小。

只需將SpriteLayer添加到view屬性即可將其添加到UINavigationController中。 一個好方法是通過繼承UINavigationController並覆蓋viewDidLoad

- (void)viewDidLoad {
    [super viewDidLoad];

    SpriteLayer *spriteLayer = [[SpriteLayer alloc] initWithFrame:CGRectMake(0, 300, 320, 50)];
    [self.view addSubview:spriteLayer];

}

推送和彈出動畫將在SpriteLayer后面運行。 使用sendSubviewToBack和相關的UIView方法可以實現其他行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM