首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GetSublayers by Hit测试ios

GetSublayers by Hit测试ios
EN

Stack Overflow用户
提问于 2015-10-12 15:35:01
回答 1查看 83关注 0票数 0

我可以在任何时候通过hittest编码得到一个子层。但是我想在那个时候得到所有的层。问题是:通过命中测试,我只能在hat点获得最上面的层,它不会给出任何关于该点上层下面的层的信息。

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

EN

回答 1

Stack Overflow用户

发布于 2015-10-12 15:49:57

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

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

代码语言:javascript
复制
-(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上。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33075592

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档