我可以通过编码在任何时候通过hittest获得子图层。但我希望在那一点上获得所有层次。 问题是: 通过命中测试,我只能获得帽点处的最顶层,它不会提供有关该顶层下面的层的任何信息。
有没有办法找到ios中特定点的所有图层?
答案 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上实现它。