iphone开发:在动画期间禁用用户交互

iphone开发:在动画期间禁用用户交互,iphone,objective-c,ios,animation,user-interaction,Iphone,Objective C,Ios,Animation,User Interaction,在我的应用程序中,我有一些动画。例如,我的主菜单中有一个按钮,当您单击它时,动画开始(如移动某个位置等),并在动画结束时导航到另一个页面。我需要的是在动画期间禁用用户交互。因为在动画中,如果我按下按钮的起始点,应该导航的页面会打开两次。总而言之,如果我在动画中不让任何类型的用户交互,我的问题就会得到解决。如何执行此操作?很简单,您可以在动画开始之前将setUserInteractionEnabled设置为NO,然后在动画完成处理程序中将其设置回YES [myObject setUserInter

在我的应用程序中,我有一些动画。例如,我的主菜单中有一个按钮,当您单击它时,动画开始(如移动某个位置等),并在动画结束时导航到另一个页面。我需要的是在动画期间禁用用户交互。因为在动画中,如果我按下按钮的起始点,应该导航的页面会打开两次。总而言之,如果我在动画中不让任何类型的用户交互,我的问题就会得到解决。如何执行此操作?

很简单,您可以在动画开始之前将
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];
    }
}];
动画之前:

self.view.userInteractionEnabled = NO;
在动画完成块中:

self.view.userInteractionEnabled = YES;

禁用按钮的用户指向

Btn.userInteractionEnabled = NO;

您不必在完成块上到处乱动-有一个动画选项可以做到这一点:

[UIView animateWithDuration:1.0 delay:0.0 options:UIViewAnimationOptionAllowUserInteraction
    animations:^{
        // animations here
    }
    completion:nil];
如果您设置了
UIViewAnimationOptionAllowUserInteraction
,那么用户交互将被允许。

这可能会有帮助:

// 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]; 
        }
    }
];

要在视图中禁用触摸事件

 [[UIApplication sharedApplication] beginIgnoringInteractionEvents];
在视图中启用触摸事件的步骤

[[UIApplication sharedApplication] endIgnoringInteractionEvents];

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

为了避免这种情况,我在tap事件开始时使用了这两行代码 这确保不管发生什么,endIgnoring都会调用

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

如何设置视图的动画?传统方法还是使用块?@nspostwenidle..为什么它是错误的或stackOverflow不允许它?好的,先生…下次我会处理它的,…:)@death-如果你必须在一个视图中按两个按钮并同时在两个按钮上显示动画,那么?如果用户在视图中有两个按钮,那么wht…?禁用视图将禁用所有子视图,你是对的…但是我想说,如果用户有两个按钮并同时在两个按钮上显示动画,那么根据到您的代码。。。。因此,我建议禁用按钮是更好的方法……请注意,如果选择此选项,您的手势可能会由位于当前视图下方的任何视图处理。根据“在动画期间,将暂时禁用动画中涉及的所有视图的用户交互,而不考虑此属性中的值。”所以这应该是不必要的(但我有同样的问题)。问题是如何在动画期间禁用用户交互。此动画选项允许用户对正在设置动画的视图进行交互。
-(void) on_image_tap:(UITapGestureRecognizer * ) tapGesture
{
    [[UIApplication sharedApplication] beginIgnoringInteractionEvents];
    [[UIApplication sharedApplication] performSelector:@selector(endIgnoringInteractionEvents) withObject:nil afterDelay:0.5f];