2014-08-30 5 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의 모범 사례는 무엇입니까? 애니메이션을 지연시켜야합니까? 또는 do [self performSelector : @selector (touchUpAnimations) withObject : nil afterDelay : 1]; ? – Gizmodo

+0

큰 차이는 없다고 생각합니다. 필자가 선호하는 것처럼 애니메이션을 지연 시키지만, 다른 방법을 사용하면 다른 터치가 발생하면 "아무것도하지 않음"애니메이션을 피할 수 있습니다. – pbasdf