2012-08-08 45 views
1

這是我的問題:我試圖顯示一個UIWindow顯示徑向漸變的子視圖。我想把窗口放在UIWindowLevelAlert中。我以前都有過這樣的想法,但它現在還在工作,但現在我試圖重現它,浪費了數小時...... 這是我得到的代碼(背景不是漸變,因爲我想保持簡單,然後添加一種觀點認爲確實是像一個UIAlertView中的一個):如何顯示像UIAlertView一樣的基於UIWindow的變暗背景?

- (IBAction)buttonPressed { 
UIWindow *backgroundWindow = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds]; 
backgroundWindow.windowLevel = UIWindowLevelAlert; 
UIView *backgroundView = [[UIView alloc]initWithFrame:[UIScreen mainScreen].bounds]; 
backgroundView.backgroundColor = [UIColor blackColor]; 
backgroundView.alpha = 0.5; 
[backgroundWindow makeKeyAndVisible]; 
[backgroundWindow addSubview:backgroundView]; 
backgroundWindow.hidden = NO; 

}

+0

在你的.h文件中聲明UIWindow * backgroundWindow – 2013-02-12 13:51:13

回答

4

當的UIWindow被dealloc'd,它將被從屏幕中移除。既然你不保留對UIWindow的引用,我相信它會被釋放和釋放,因此它不會顯示。

解決方案是保持對某個窗口的引用。你可以將它作爲你正在工作的課程中的一個屬性存儲嗎?

+0

UIWindow在作爲子視圖添加之前不會自動釋放 - 即使釋放被調用,它也不會因其保留計數而被釋放,事實上它不是自動釋放,它的內存泄漏如果有什麼。 – 2012-08-08 23:39:35

+0

UIWindow將在最後一行之後發佈(至少在ARC中)。看看的地方是'[UIApplication sharedApplication] .windows'。創建的窗口最初會在那裏,但如果在延遲後查看該數組,該窗口將會消失。 – 2012-08-08 23:44:35

+0

與ARC你可能是正確的,抱歉不要使用那些東西。 – 2012-08-08 23:46:37