GetIublayers by Hit test ios

时间:2015-10-12 07:35:01

标签: ios xcode view hittest

我可以通过编码在任何时候通过hittest获得子图层。但我希望在那一点上获得所有层次。 问题是: 通过命中测试,我只能获得帽点处的最顶层,它不会提供有关该顶层下面的层的任何信息。

有没有办法找到ios中特定点的所有图层?

1 个答案:

答案 0 :(得分:1)

命中测试用于传递事件。由于事件总是传递到最顶层的视图,因此命中测试继续测试下面的视图是没有意义的。

但是,如果您确实希望在某一点上找到所有图层,您可以将自己的hitTest版本编写为CALayer上的类别:

-(NSMutableSet*)allLayersAtPoint:(CGPoint)aPoint
{
    NSMutableSet *layers = [[NSMutableSet alloc] init];
    if(! CGRectContainsPoint([self frame],aPoint)) 
    {
        return layers;
    }


    [layers addObject:self]

    for(CALayer *layer in self.sublayers) {
       CGPoint converted = [self convertPoint:aPoint toLayer:layer]
       [layers unionSet:[layer allLayersAtPoint:converted]]
    }


    return layers
}

请注意具有子层转换的图层。不知道如何处理。通常这是在UIViews上完成的,我不确定你为什么要在图层上这样做。如果你想让它在UIViews上运行,只需在UIView而不是CALayer上实现它。