2010-09-09 36 views
0

我想在我的iPad應用程序中重現此行爲。 我有一個包含四個自定義按鈕的子視圖。UiView fadeout如果沒有觸及

  • 視圖具有0.0
  • 的α值I具有高於descripted的視圖之外另一自定義按鈕始終可見。
  • 當用戶觸摸可見按鈕時,視圖會將其alpha顯示爲1.0,顯示其他4個按鈕。
  • 現在我想開始一個定時器,在2秒後觸發fadeOut
  • 當用戶與按鈕交互(比如touchDown或其他)時,需要重置定時器。

換句話說,只有當沒有人觸摸它內部的按鈕時,視圖纔會消失。

你能幫我解決這個問題嗎?

我已經設法學習UIView動畫的基礎知識,但我不知道如何對它們排隊。 我的iPad有iOS 3.2.2。安裝。 對不起,但這是我的第一個iPad應用程序和我的第一個obj-c項目。

回答

1

你會爲此保留一個NSTimer實例變量。只要您的視圖完全可見,您可以通過例如實現動畫的委託褪色,你初始化像這樣:

_fadeTimer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(fade:) userInfo:nil repeats:NO]; 

確保_fadeTimer是一個實例變量,你必須能夠將其復位。然後執行淡出方法:

- (void)fade:(NSTimer *)aTimer { 
    // Forget about timer! 
    _fadeTimer = nil; 

    [UIView beginAnimations:nil context:NULL]; 
    // fade here 
    [UIView commitAnimations]; 
} 

在每次用戶交互時,您只需調用延遲淡入淡出的方法。爲此,請刪除並重新創建計時器。或者更改它的啓動日期:

- (void)delayFade { 
    [_fadeTimer setFireDate: [NSDate dateWithTimeIntervalSinceNow: 2.0]]; 
} 

PS:沒有必要明確地保留計時器。它由runloop保留直到它被觸發。回調之後,它將被釋放。只要確保您始終將該變量重置爲nil,否則您的應用可能會在無效訪問時崩潰。如果您需要刪除觸發的時間,請致電invalidate方法。

+0

感謝很多簡單而有效的解決方案!有效!我想知道當塊語法到達iPad時它將如何改變。 – microspino 2010-09-10 23:24:37