2010-09-03 43 views
1

我試圖使用一個UIImage作爲一個按鈕,它給人的印象是打開,然後在大約半秒內再次關閉。這工作正常,如果我打開它,但如果我想再次關閉它根本不會打開。我有一個短循環在那裏,以防止它打開和關閉這麼快,我看不到它,但它根本不會打開。我已經嘗試過,沒有[flashingButton release]。我在這裏有什麼誤解嗎?即使短暫延遲,我是否可以在addSubviewremoveFromSuperView的同一時間?閃爍UILabel作爲

if ( some conditional statements in here .......) { 

    UIImage *estimateButton1 = [UIImage imageNamed:@"FlashingButton.png"]; 
    flashingButton = [[UIImageView alloc] initWithImage:flashingButton1]; 
    flashingButton.frame = CGRectMake (146,8,165,30); 
    [self.view addSubview:flashingButton]; 
    // [flashingButton release]; 

    //  short loop in here to delay urning the button off 

    [self.flashingButton removeFromSuperview]; 

回答

0

在主線程內循環將暫時掛起程序並防止任何繪圖發生。相反,請使用NSTimer

3

用戶界面繪圖直到稍後在主運行循環中才會發生。您撥打addSubviewflashingButton添加到self.view,但不繪製它。你的短循環阻塞了主循環,所以它仍然沒有到達繪圖部分。然後,在主運行循環繪製它之前,您將刪除按鈕。

一種解決方案是在添加閃爍按鈕(讓它被繪製)之後讓主運行循環繼續,但是創建一個定時器,以便將來刪除該按鈕。你可以使用performSelector:withObject:afterDelay:來做到這一點。

[self.flashingButton performSelector:@selector(removeFromSuperview) withObject:nil afterDelay:0.5f]; 

你可以閱讀關於「Threading Programming Guide」跑環和有關圖紙被如何做「View Programming Guide for iOS」。

+0

非常感謝詹姆斯的代碼和推薦。該代碼正是我想要的。給我幾杯飲料! – TrueScot 2010-09-04 13:42:42

+0

很高興幫助。謝謝你的飲料! – 2010-09-05 03:55:32