2014-08-30 107 views
1

我想讓UIView在觸摸屏幕上離開屏幕,並在觸摸之後稍微延遲迴來。到目前爲止:UIView動畫取消

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [[event allTouches] anyObject]; 
    if ([touch view] == myMainView) 
    { 
    [disappearingView.layer removeAllAnimations]; 
    [UIView animateWithDuration:0.5 
          delay:0 
     usingSpringWithDamping:0.7 
      initialSpringVelocity:0.2 
         options:UIViewAnimationOptionBeginFromCurrentState 
        animations:^ 
    { 
     disappearingView.transform = CGAffineTransformMakeScale(0, 0); 

    } 
        completion:^(BOOL finished) 
    { 

    }]; 

    } 
} 

    - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [[event allTouches] anyObject]; 
    if ([touch view] == myMainView) 
    { 
     [UIView animateWithDuration:0.5 
          delay:1 
     usingSpringWithDamping:0.7 
      initialSpringVelocity:0.2 
         options:UIViewAnimationOptionBeginFromCurrentState 
        animations:^ 
    { 
     disappearingView.transform = CGAffineTransformMakeScale(1, 1); 

    } 
        completion:^(BOOL finished) 
    { 

    }]; 

    } 
} 

上面的代碼到目前爲止工作正常。但是,如果用戶在1秒延遲到期之前擡起手指並再次觸地,即使觸地下降,消失的視圖仍然會恢復。如果你隨機觸摸,動畫非常不一致。

我希望視圖在1秒後回來,並且根本沒有任何接觸。

回答

1

touchesBegan中設置一個標誌並在touchesEnded中再次清除標誌。在touchesEnded的動畫塊中,檢查該標誌,如果該標誌已設置,則不要重新縮放至(1,1)。這樣,如果在第一次結束之後但動畫完成之前再次觸摸它,則不會再回來。

+0

我正在嘗試這個過程。 DELAY的最佳做法是什麼?我應該通過延遲動畫來做到嗎?或者做[self performSelector:@selector(touchUpAnimations)withObject:nil afterDelay:1]; ? – Gizmodo 2014-08-30 18:48:39

+0

我不認爲這有很大的區別。我的偏好是讓動畫延遲(正如你現在所做的那樣),但以另一種方式進行則會避免動畫「無所作爲」,如果發生了另一次觸摸。 – pbasdf 2014-08-30 19:30:44