gpt4 book ai didi

ios - 我可以在表示层中访问 CAShapeLayer 的路径属性吗?

转载 作者:行者123 更新时间:2023-12-01 16:09:19 33 4
gpt4 key购买 nike

我有一个名为“starfish”的 UIView subview 。它的背衬层是一个 CAShapeLayer,它的路径描边为海星形状。我想在封闭路径内的 View Controller 中对这个形状进行 HitTest ,而不是 View 的矩形。这没问题,我只需在 View Controller 的 touchesBegan 中的 CAShapeLayer 路径属性上调用 CGPathContainsPoint() 并点击测试即可。

CGPoint p = [[touches anyObject] locationInView:self.view];
CGPoint q = [self.view convertPoint:p toView:self.starfish];

if (CGPathContainsPoint([(CAShapeLayer*)self.starfish.layer path], NULL, q, true))
NSLog(@"Success");
else
NSLog(@"Fail");

但是,如果 View 是动画的,从 A 移动到 B,则需要在表示层中访问 CAShapeLayer 的路径,但我似乎无法访问它。
// Not working during animation
if (CGPathContainsPoint([(CAShapeLayer*)self.starfish.layer.presentationLayer path], NULL, q, true))
NSLog(@"Success");
else
NSLog(@"Fail");

最佳答案

好吧,我找到了一个可行的解决方案。我创建了一个新的 CAShapeLayer,它与我在 touchesBegan 中测试的 CAShapelayer 具有相同的路径和框架(基于表示层)。

CGPoint p = [[touches anyObject] locationInView:self.view];

CGRect rect = [(CAShapeLayer*)self.starfish.layer.presentationLayer frame];

CAShapeLayer *shape = [CAShapeLayer layer];
shape.path = [(CAShapeLayer*)self.starfish.layer path];
shape.frame = rect;

CGPoint q = [self.view.layer convertPoint:p toLayer:shape];

if (CGPathContainsPoint(shape.path, NULL, q, true))
NSLog(@"Success");
else
NSLog(@"Fail");

关于ios - 我可以在表示层中访问 CAShapeLayer 的路径属性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33828444/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com