2013-11-09 35 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

您忘了将视图重新调整回原来的状态...... –