2012-09-06 27 views
8

在我的应用程序我有一些动画。例如,我在主菜单中有一个按钮,当您单击它时,动画开始(如移动某个地方等),并在动画结束时导航到另一个页面。我需要的是在动画期间禁用用户交互。因为在动画过程中如果我按下我的按钮的起点,那么应该导航的页面会打开两次。总结一下,如果我在动画过程中不让任何用户交互,我的问题就会解决。我怎样才能做到这一点?iphone开发:在动画过程中禁用用户交互

+0

你如何动画的看法?传统的方法或使用块? – 2012-09-06 15:07:41

+0

@ NSPostWhenIdle ..为什么它错了或stackoverflow不允许它? – Rajneesh071

+0

好吧,先生...下次我会照顾它,... :) – Rajneesh071

回答

19

动画之前:

self.view.userInteractionEnabled = NO; 

,并在动画完成块:

self.view.userInteractionEnabled = YES; 
+0

如果用户在视图上有两个按钮,然后wht ..? – Rajneesh071

+1

禁用视图将禁用所有子视图 – swebal

+0

是的,你是对的....但我想说,如果用户有两个按钮,并希望同时在两个按钮上的一些动画...那么怎么才能根据你的代码.. ..所以我建议禁用按钮是更好的方法.... – Rajneesh071

6

很简单,您可以在动画开始前将setUserInteractionEnabled设置为NO,并在动画完成处理程序中将其设置回YES

[myObject setUserInteractionEnabled:NO]; 
[UIView animateWithDuration:1.0 animations:^{ 
    [myObject setTransform:CGAffineTransformMakeTranslation(100, 100)];//some animation 
}completion:^(BOOL done){ 
    if (done){ 
     [myObject setUserInteractionEnabled:YES]; 
    } 
}]; 
2
yourView.userInteractionEnabled = NO; 
[UIView animateWithDuration:1 animations:^ 
{ 
    //animations here      
} 
completion:^(BOOL finished) 
{ 
    yourView.userInteractionEnabled = YES; 
}]; 
1

按钮的禁用userIntrection。

Btn.userInteractionEnabled = NO; 
5

你不必砍周围建成块 - 有一个动画选项,它不只是这正是:

[UIView animateWithDuration:1.0 delay:0.0 options:UIViewAnimationOptionAllowUserInteraction 
    animations:^{ 
     // animations here 
    } 
    completion:nil]; 

如果您设置了UIViewAnimationOptionAllowUserInteraction,那么用户交互将是允许。

+1

问题是如何在动画期间禁用用户交互的所有内容。这个动画选项允许用户交互视图动画。 – AWrightIV

15

这可能帮助:

// for ignoring event 
[[UIApplication sharedApplication] beginIgnoringInteractionEvents]; 
[[UIApplication sharedApplication] endIgnoringInteractionEvents]; 

代码如下:

[UIView animateWithDuration:1.0 animations:^{ 
     //some animation 
     [[UIApplication sharedApplication] beginIgnoringInteractionEvents]; 
    } 
    completion:^(BOOL done){ 
     if (done){ 
      [[UIApplication sharedApplication] endIgnoringInteractionEvents]; 
     } 
    } 
]; 
+1

正是我需要的,谢谢! – iceydee

2

在视图中禁用触摸事件,

[[UIApplication sharedApplication] beginIgnoringInteractionEvents]; 

在视图中

使触摸事件
[[UIApplication sharedApplication] endIgnoringInteractionEvents]; 
0

我有视图控制器打开页面的图标。 如果用户快速点击icon1和icon2,则打开2个页面。

防止我有这个2号线到水龙头事件 年初这确保无论发生,endIgnoring将调用

-(void) on_image_tap:(UITapGestureRecognizer *) tapGesture 
{ 
    [[UIApplication sharedApplication] beginIgnoringInteractionEvents]; 
    [[UIApplication sharedApplication] performSelector:@selector(endIgnoringInteractionEvents) withObject:nil afterDelay:0.5f];