我知道动画期间UIViews的用户互动主题受到质疑,但我想知道是否有可能检测到触摸是否属于特定部分整个UIView。
首先,我在UIView中的动画代码是:
[UIView animateWithDuration:15.0 delay:0.0 options:(UIViewAnimationOptionCurveEaseIn | UIViewAnimationOptionAllowUserInteraction) animations:^{
self.frame = FINAL_RECT;
} completion:^(BOOL finished) {
[self removeFromSuperview];
}];
在viewController上点击检测:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
CGPoint touchPoint = [touch locationInView:self.view];
BulletView *aBullet;
for (aBullet in bulletArray) { //bulletArray contains the animating UIViews
if ([[aBullet.layer presentationLayer] hitTest:touchPoint])
{
break;
}
}
[aBullet.layer removeAllAnimations];
[aBullet removeFromSuperview];
[bulletArray removeObject:aBullet];
}
逻辑是视频在成功命中时被删除。这很有效,但问题是[[aBullet.layer presentationLayer] hitTest:touchPoint]
考虑了整个UIView,而我需要查看用户是否在整个视图中点击了一个特定区域。像这样:
我试图将touchPoint传递给UIView,将其与帧进行比较,看看触摸是否在红色方块内,但这不起作用,因为视图的帧已经设置(通过动画)到最终的动画帧。
你的想法是谁?提前谢谢..
更新 仍然没有找到解决方案,但我已暂时解决了这个问题 (a)完全禁用主要子弹视图的触摸 (b)让另一个视图在子弹前移动,匹配其移动(设置为上面红框的大小),以捕捉触摸。 这很好,但它显然不是一个非常有效的内存方法(因为我需要使用两个视图而不是一个),所以如果有人能想出一个正确解决这个问题的方法,它会很棒。干杯!