Po pierwsze, nie powinieneś rysować warstw w drawRect, ale to nie jest twoje pytanie. Aby zidentyfikować warstwę, która jest „dotknięty” można zrobić coś takiego ...
- (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;
}
}
}
}
}
Hi Jody, można po prostu rozwinąć kod wewnątrz jeśli warunek, aby uzyskać więcej światła, – user1333444
OK, zaktualizowałem go trochę więcej szczegółów. Zasadniczo, jeśli jest to warstwa kształtu, wyszukujesz jej ścieżkę i widzisz, czy ta ścieżka zawiera punkt ... Pamiętaj jednak, że musisz podać typ wypełnienia jako część CGPathContainsPoint - Założono, że parzyste/nieparzyste. Użyj czegokolwiek, czego potrzebujesz ... –
To nie działa dla dotknięć na granicy, jeśli szerokość linii jest większa niż 1. – jjxtra