[英]Best way to keep a view persistent behind all views in Navigation Controller
並提前感謝。
我正在尋找有關如何在我的應用程序中布局視圖控制器的建議,我仍然有一個持久的背景和一些背景動畫
這是它目前的設置方式:
在代碼中:
- (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.