Primero, no debería dibujar capas en drawRect, pero esa no es su pregunta. Para identificar una capa que está "tocado", se puede hacer algo como esto ...
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
for (UITouch *touch in touches) {
CGPoint touchLocation = [touch locationInView:self.view];
for (id sublayer in self.view.layer.sublayers) {
BOOL touchInLayer = NO;
if ([sublayer isKindOfClass:[CAShapeLayer class]]) {
CAShapeLayer *shapeLayer = sublayer;
if (CGPathContainsPoint(shapeLayer.path, 0, touchLocation, YES)) {
// This touch is in this shape layer
touchInLayer = YES;
}
} else {
CALayer *layer = sublayer;
if (CGRectContainsPoint(layer.frame, touchLocation)) {
// Touch is in this rectangular layer
touchInLayer = YES;
}
}
}
}
}
Hola Jody, ¿puedes ampliar el código dentro de la condición if para más luz, – user1333444
OK, he actualizado con un poco mas detalle. Básicamente, si se trata de una capa de forma, consulta su ruta y ve si esa ruta contiene el punto ... Tenga en cuenta, sin embargo, que debe pasar el tipo de relleno como parte de CGPathContainsPoint - Supuse que es par/impar. Use lo que necesite ... –
Esto no funciona para los toques en el borde si el ancho de la línea es mayor que 1. – jjxtra