移动UIButton是不可点击的?

时间:2014-11-09 14:18:06

标签: ios objective-c

我们将这个动画用于按钮上的一些气泡效果,但它阻止了它的可点击性。如果我们禁用这个动画他就会工作。

我们可以修复它以使其适用于动画吗?

 CGRect initi=[[initialPositions objectAtIndex:b.tag] CGRectValue];
        int r1=arc4random()%4;
        int r2=arc4random()%4;
        initi.origin.x+=r1;
        initi.origin.y+=r2;


        [UIView animateWithDuration:0.8 delay:0.0 options:UIViewAnimationOptionCurveEaseInOut animations:^
         {
            b.frame=initi;

         }
          completion:^(BOOL completed){    }];

2 个答案:

答案 0 :(得分:2)

据我所知,在动画过程中,该按钮实际上并未被禁用或无法点击。当动画开始时,按钮的触摸区域立即移动到动画结束时按钮所在的位置。这使得感觉在动画期间按钮无法点击。

从触控逻辑的角度来看,按钮只是从A移动到B,A和B之间的动画只是眼睛糖果。这解释了为什么触摸在各点之间不起作用。

唯一可行的解​​决方案是滚动自己的动画例程。如果你想采取这条路线,Ben Bojko的这篇名为The Holy Grail of iOS Animation Intervals?的帖子应该指出你正确的方向。

答案 1 :(得分:1)

正如Markus在他的回答(投票)中所说,按钮实际上会在动画开始时移动到它的结束位置,并且一旦动画开始就会接受点击。动画实际上发生在视图层次结构的“表示层”中。

你可以使用Markus建议做自己的动画,但这是处理器密集型的,并不像基于图层的动画那样流畅(这就是UIView动画在幕后工作的方式。)

如果你想使用UIView动画并让你的按钮在动画处于运行状态时响应点击,那么你需要制作限制整个动画可点击的超级视图,并在按钮的表示层上实现命中测试以找出如果水龙头按下按钮。 (superview使用tap,然后使用hitTest:方法检查它的坐标以查看它是否在按钮的表示层内。)

我在github上有一个名为iOS CAAnimationGroup demo(链接)的项目,它显示了如何执行此操作,包括基于CAAnimation的动画和基于UIView的动画。