【问题标题】:iphone development: disabling user interaction during the animationiphone开发:在动画期间禁用用户交互
【发布时间】:2012-08-31 10:44:51
【问题描述】:

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

【问题讨论】:

  • 如何为视图设置动画?传统方法还是使用积木?
  • @NSPostWhenIdle..为什么是错的或者stackOverflow不允许呢?
  • 好的先生...下次我会照顾它的,...:)
  • @death - 如果你必须在一个视图中按下按钮并且想要同时在两个按钮上动画呢?

标签: iphone objective-c ios animation user-interaction


【解决方案1】:

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

    【讨论】:

      【解决方案3】:

      动画前:

      self.view.userInteractionEnabled = NO;
      

      在动画完成块中:

      self.view.userInteractionEnabled = YES;
      

      【讨论】:

      • 如果用户有两个按钮,那么wht..?
      • 禁用视图将禁用所有子视图
      • 是的,你是对的......但我想说的是,如果用户有两个按钮并且想要同时在两个按钮上进行一些动画......那么根据你的代码怎么可能...... . 所以我建议禁用按钮是更好的方法....
      • 请注意,如果您选择此选项,您的手势可能会被当前视图下方的任何视图处理。
      • 根据developer.apple.com/reference/uikit/uiview/…“在动画期间,无论此属性中的值如何,都会暂时禁用动画中涉及的所有视图的用户交互。”所以这应该是不必要的(但我有同样的问题)。
      【解决方案4】:

      禁用 Button 的 userIntrection。

      Btn.userInteractionEnabled = NO;
      

      【讨论】:

        【解决方案5】:

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

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

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

        【讨论】:

        • 问题是如何在动画期间禁用用户交互。此动画选项允许用户对动画视图进行交互。
        【解决方案6】:

        这可能会有所帮助:

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

        【讨论】:

          【解决方案7】:

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

           [[UIApplication sharedApplication] beginIgnoringInteractionEvents];
          

          在视图中启用触摸事件

          [[UIApplication sharedApplication] endIgnoringInteractionEvents];
          

          【讨论】:

            【解决方案8】:

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

            为了防止我在点击事件的开头有这 2 行 这确保无论发生什么,endIgnoring 都会调用

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多