2013-11-09 2 views
0

사용자가 만질 수있는 서클이 있습니다.이를 터치하면 크기가 변경되고 원래 크기로 돌아가서 터치 한 것을 나타냅니다. 사용자가 현재 애니메이션을 적용할지 여부에 관계없이 원하는만큼 자주 터치 할 수 있기를 바랍니다. UIViewAnimationOptionAllowUserInteraction 플래그를 사용하여 애니메이션을 업데이트했지만 애니메이션 중에는 터치 할 수 있지만 예상대로 동작하지 않습니다.사용자 상호 작용 중 애니메이션 상태 재설정

나는 현재 재생중인 애니메이션을 중단하고 정상 크기로 재설정 한 다음 다시 재생해야한다고 생각합니다. 정확하고 그렇다면 어떻게해야합니까? 내가 뭘하면 안되니?

- (void)pop{ 
    [view.layer removeAllAnimations]; 

    [UIView animateWithDuration:0.2 
         delay:0.0 
        options:UIViewAnimationOptionAutoreverse | UIViewAnimationOptionCurveEaseOut | UIViewAnimationOptionAllowUserInteraction // reverse back to original value 
       animations:^{ 
        // scale down 20% 
        self.transform = CGAffineTransformMakeScale(0.8, 0.8); 
       } completion:^(BOOL finished) { 
        self.transform = CGAffineTransformMakeScale(1, 1); 
       }]; 
} 
+0

못해 (이 현재 상태에서에서 수행하기 때문에 오히려 원래의 상태로 재설정보다?) 난 그냥이에 발견 – Chris

답변

0
self.btn = [[UIButton alloc] initWithFrame:CGRectMake(200, 200, 100, 30)]; 
[self.btn addTarget:self action:@selector(tapDown:) forControlEvents:UIControlEventTouchDown]; 
[self.btn addTarget:self action:@selector(tapUp:) forControlEvents:UIControlEventTouchUpInside]; 


- (IBAction)tapDown:(id)sender 
{ 
    [UIView animateWithDuration:0.2 
          delay:0.0 
         options: UIViewAnimationOptionCurveEaseOut | UIViewAnimationOptionAllowUserInteraction 
        animations:^{ 
         // scale down 20% 
         self.btn.transform = CGAffineTransformMakeScale(0.8, 0.8); 
        } completion:nil]; 
} 


- (IBAction)tapUp:(id)sender { 
    [UIView animateWithDuration:0.2 
          delay:0.0 
         options:UIViewAnimationOptionCurveEaseOut | UIViewAnimationOptionAllowUserInteraction // reverse back to original value 
        animations:^{ 
         // scale up to 100% 
         self.btn.transform = CGAffineTransformMakeScale(1, 1); 
        } completion:nil]; 
} 
+0

, 그것은 것 같지 않습니다 내가 원하는 효과를 준다. 그것은 단지 두 번째 터치에서 아무 일도 일어나지 않는 것처럼 보입니다. - 코드를 업데이트했습니다. – Chris

+0

방금 ​​대답을 편집합니다. 나는 예를 들어 버튼을 사용했다. 이 효과가 조금 더 가까워 졌으면 좋겠다. – Igor

+0

UX-pov에서 더 나은 해결책이라고 할 수있다. 사용자가 손가락을 뗄 때까지 버튼이 눌려진 것처럼 보일 것입니다 ... –

0

물론 이것은 당신이 원하는 무엇을하지? 플레이어가 도청되고 팝업이 호출되면 애니메이션이 시작됩니다. 애니메이션이 부드럽게 보이게하지만, 사용자가 두 번 누르면처럼 늘 볼

- (void)pop{ 
    self.transform = CGAffineTransformMakeScale(1, 1); // If you want the animation to start over you need to reset the size before staring it again 
    [view.layer removeAllAnimations]; 

    [UIView animateWithDuration:0.2 
        delay:0.0 
       options: options:UIViewAnimationOptionAutoreverse | UIViewAnimationOptionCurveEaseOut| UIViewAnimationOptionAllowUserInteraction // reverse back to original value 
      animations:^{ 
       // scale down 20% 
       self.transform = CGAffineTransformMakeScale(0.8, 0.8); 
      } completion:^(BOOL finished) { 
       self.transform = CGAffineTransformMakeScale(1, 1); 
      }]; 
} 
+0

이것은 모든 애니메이션을 삭제한다고 언급 한 적이 있지만 작업을하지 못했습니다. – Chris

+0

보기를 원래 상태로 먼저 크기 조정하는 것을 잊었습니다 ... –

관련 문제