11

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

4

8 回答 8

21

动画前:

self.view.userInteractionEnabled = NO;

在动画完成块中:

self.view.userInteractionEnabled = YES;
于 2012-09-06T15:08:59.893 回答
18

这可能会有所帮助:

// 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]; 
        }
    }
];
于 2013-06-19T07:13:15.800 回答
6

很简单,您可以在动画开始之前设置setUserInteractionEnabledNO,然后在动画完成处理程序中将其设置回YES.

[myObject setUserInteractionEnabled:NO];
[UIView animateWithDuration:1.0 animations:^{
    [myObject setTransform:CGAffineTransformMakeTranslation(100, 100)];//some animation
}completion:^(BOOL done){
    if (done){
        [myObject setUserInteractionEnabled:YES];
    }
}];
于 2012-09-06T15:07:46.517 回答
5

您不必修改完成块 - 有一个动画选项可以做到这一点:

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

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

于 2012-09-06T15:15:20.847 回答
2

要在视图中禁用触摸事件,

 [[UIApplication sharedApplication] beginIgnoringInteractionEvents];

在视图中启用触摸事件

[[UIApplication sharedApplication] endIgnoringInteractionEvents];
于 2013-08-30T10:19:20.470 回答
2
yourView.userInteractionEnabled = NO;
[UIView animateWithDuration:1 animations:^
{
    //animations here                    
}
completion:^(BOOL finished)
{
    yourView.userInteractionEnabled = YES;
}];
于 2012-09-06T15:08:32.257 回答
1

禁用 Button 的 userIntrection。

Btn.userInteractionEnabled = NO;
于 2012-09-06T15:09:16.610 回答
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];
于 2015-08-21T11:46:56.063 回答