UIView动画取消

时间:2014-08-30 17:17:44

标签: ios animation uiview touch

我想在触摸后让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 个答案:

答案 0 :(得分:1)

touchesBegan中设置一个标记,然后在touchesEnded中再次清除它。在touchesEnded的动画块中,检查标志,如果设置了标志,则不重新调整为(1,1)。这样,如果你在第一次结束之后但在动画完成之前再次进行第二次触摸,它将不会再回来。