2012-12-12 94 views
1

我有一個TableViewCell,當它被點擊時(即快速高亮顯示並關閉幾次),我想閃爍。需要TableViewCell在被觸摸時閃爍

-(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
     NSTimer *blinkTimer = [[NSTimer scheduledTimerWithTimeInterval:.05 target:self selector:@selector(toggleHighlightedMenuCell) userInfo:nil repeats:YES] retain]; 
     self.blinkTimer = blinkTimer; 
     [blinkTimer release]; 
} 

-(void) toggleHighlightedMenuCell 
{ 
    if (self.highlightedMenuCell.isHighlighted) 
    { 
     self.highlightedMenuCell.highlighted = NO; 
    } 
    else 
    { 
     self.highlightedMenuCell.highlighted = YES;   
    } 

    self.blinkTimerCounter++; 

    if (self.blinkTimerCounter == 2) 
    { 
     self.blinkTimerCounter = 0; 
     [self.blinkTimer invalidate]; 

     //execute some code 
    } 
} 

的問題,這是它似乎開始在//execute some code部分執行的代碼,它的完成閃爍之前:

到目前爲止如下我實現了這個功能有一個計時器。任何人都可以想出一個更好的方法來實現這個目標嗎

+0

它執行閃爍結束前@rdelmar –

+0

對不起,我只是錯過了你的帖子的那部分代碼。 – rdelmar

回答

0

端了一些鏈接UIView的動畫一起它結束了完美的工作:

-(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
      [UIView animateWithDuration:.05 delay:0 options:0 animations: 
      ^{ 
       self.highlightedMenuCell.highlighted = !self.highlightedMenuCell.highlighted; 
      } 
      completion:^(BOOL finished) 
      { 
       [UIView animateWithDuration:.05 delay:0 options:0 animations: 
       ^{ 
        self.highlightedMenuCell.highlighted = !self.highlightedMenuCell.highlighted; 
       } 
       completion:^(BOOL finished) 
       { 
        if ([self.menuViewDelegate respondsToSelector:@selector(menuView:didSelectMenuItem:viaTouchType:)]) 
        { 
         [self.menuViewDelegate menuView:self didSelectMenuItem:self.highlightedMenuCell.menuItem viaTouchType:TouchTypeTouchUpInside]; 
        } 
       }]; 
      }]; 
} 
1

我認爲你的時間間隔太短,看不到有效。我不認爲「執行某些代碼」實際上正在執行,直到閃爍結束,它看起來就像它。也不需要執行保留和釋放語句或將計時器分配給變量。運行循環保留計時器,並在其失效時釋放它。雖然選擇器的名字應該有冒號,因爲定時器將自身作爲參數傳遞。所以代碼可以簡化爲:

-(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
     [NSTimer scheduledTimerWithTimeInterval:.1 target:self selector:@selector(toggleHighlightedMenuCell:) userInfo:nil repeats:YES]; 
} 

-(void) toggleHighlightedMenuCell:(NSTimer *) aTimer 
{ 
    if (self.highlightedMenuCell.isHighlighted) 
    { 
     self.highlightedMenuCell.highlighted = NO; 
    } 
    else 
    { 
     self.highlightedMenuCell.highlighted = YES;   
    } 

    self.blinkTimerCounter++; 

    if (self.blinkTimerCounter == 2) 
    { 
     self.blinkTimerCounter = 0; 
     [aTimer invalidate]; 

     //execute some code 
    } 
} 

我假設你已經初始化blinkTimerCounter別的地方。

+0

感謝您的回覆+1。 –