我们将这个动画用于按钮上的一些气泡效果,但它阻止了它的可点击性。如果我们禁用这个动画他就会工作。
我们可以修复它以使其适用于动画吗?
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){ }];
答案 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的动画。