在动画期间允许用户交互为UIView的PART

时间:2014-11-24 14:19:03

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

我知道动画期间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,而我需要查看用户是否在整个视图中点击了一个特定区域。像这样:

enter image description here

我试图将touchPoint传递给UIView,将其与帧进行比较,看看触摸是否在红色方块内,但这不起作用,因为视图的帧已经设置(通过动画)到最终的动画帧。

你的想法是谁?提前谢谢..

更新 仍然没有找到解决方案,但我已暂时解决了这个问题 (a)完全禁用主要子弹视图的触摸 (b)让另一个视图在子弹前移动,匹配其移动(设置为上面红框的大小),以捕捉触摸。 这很好,但它显然不是一个非常有效的内存方法(因为我需要使用两个视图而不是一个),所以如果有人能想出一个正确解决这个问题的方法,它会很棒。干杯!

0 个答案:

没有答案