【发布时间】:2015-11-20 13:54:40
【问题描述】:
我有一个名为“starfish”的 UIView 子视图。它的背衬层是一个 CAShapeLayer,它的路径描边为海星形状。我想在封闭路径内的视图控制器中对这个形状进行命中测试,而不是视图的矩形。这没问题,我只需在视图控制器的 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");
如果视图是动画的,从 A 移动到 B,同样的命中测试需要访问表示层中 CAShapeLayer 的路径,但我似乎无法访问它。
// Not working during animation
if (CGPathContainsPoint([(CAShapeLayer*)self.starfish.layer.presentationLayer path], NULL, q, true))
NSLog(@"Success");
else
NSLog(@"Fail");
【问题讨论】:
标签: ios cashapelayer