iPhone旋转后hitTest无法正常工作

3

我有一个包含多个CALayer子类的UIView。我正在使用以下代码来检测触摸事件对应于哪个图层:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [touches anyObject];
    CGPoint touchPoint = [touch locationInView:self];
NSLog(@"%@,%@",NSStringFromCGPoint(point),[self.layer hitTest:point].name);


}

这在设备没有旋转时可以正常工作。但一旦旋转设备,所有当前图层都将从超级图层中删除,并创建新的CALayer以适应新方向。新层被正确地插入并在正确方向上可见。

旋转后,hitTest方法始终返回该层的null值。我注意到当旋转180度时,返回的层是旋转前该位置的层,即触摸左上角图层会在旋转180度后给出右下角的图层。hit测试的坐标按预期打印,其中(0,0)在左上角。我在每次旋转时重新绘制图层,但由于某种原因它们似乎被映射为“正确”方式,Home键在底部。我是否错过了旋转处理后的函数调用或其他一些内容?

谢谢, Adam

1个回答

4

好的,我发现以下代码在所有方向上都没有任何问题(在我的情况下,没有重叠的视图,所以这对我来说是适当的):

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *t = [touches anyObject];

    CGPoint point = [t locationInView:self];

    for(CALayer *layer in self.layer.sublayers) {

        CGPoint convertedPoint = [self.layer convertPoint:point
                                                  toLayer:layer];

        if([layer containsPoint:convertedPointPoint]) {
            NSLog(@"%@",layer.name);
        }
    }
}

虽然手动转换指针可以正常工作,但仍然存在一个问题,那就是为什么原始方法调用不起作用。有人能给我解释一下吗?
亚当

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接