Вам нужно будет использовать UIView, который содержит CALayer для обработки сенсорных событий, для CALayers нет встроенных сенсорных событий. - (CALayer *)hitTest:(CGPoint)thePoint
возвращает самый глубокий CALayer, в котором находится точка от события касания. Таким образом, если вы позвоните [self.layer hitTest:point]
, он проверит все ваши подслои и вернет правильный CALayer
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
CGPoint point = [[touches anyObject] locationInView:self];
CALayerSubclass *taplayer = [self.layer hitTest:point]
NSArray *points = [taplayer getPoints];
}
Невозможно вывести из CGPath очки, которые вы в него кормили. Лучшее, что вы можете сделать, это эти методы о получении информации с пути. Итак, как вы сказали, лучше всего подкласс CALayer и поместить всю необходимую информацию в структуру данных для последующего извлечения.
// .h
@interface CALayerSubclass : CALayer
@property (nonatomic, strong) NSMutableArray *points;
@end
// .m
-(void)drawInContext:(CGContextRef)ctx {
...
[bezierPath addCurveToPoint:controlPoint1:point1 controlPoint2:point2];
[points addObject:[NSValue valueWithCGPoint:point1]];
[points addObject:[NSValue valueWithCGPoint:point2]];
...
}
Просто сохраните все CGPoints (или большинство других структур Core Graphics) в NSValue и бросьте их в массив.