我可以在任何时候通过hittest编码得到一个子层。但是我想在那个时候得到所有的层。问题是:通过命中测试,我只能在hat点获得最上面的层,它不会给出任何关于该点上层下面的层的信息。
有没有办法在ios中找到特定点的所有层?
发布于 2015-10-12 15:49:57
命中测试用于传递事件。由于事件总是传递到最上面的视图,因此继续测试下面的事件是没有意义的。
但是,如果您确实希望在某个点上找到所有层,您可以在CALayer上编写您自己的hitTest版本作为一个类别来实现此目的:
-(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上做的,我不知道你为什么要在layers上做这个。如果你想让它在UIViews上工作,只需要在UIView上实现它,而不是在CALayer上。
https://stackoverflow.com/questions/33075592
复制相似问题