Trước tiên, bạn không nên vẽ các lớp trong drawRect, nhưng đó không phải là câu hỏi của bạn. Để xác định một lớp được "chạm" bạn có thể làm một cái gì đó như thế này ...
- (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;
}
}
}
}
}
Nguồn
2012-04-14 16:58:08
Hi Jody, có thể bạn chỉ cần mở rộng mã bên trong nếu điều kiện cho ánh sáng hơn, – user1333444
OK, tôi cập nhật nó với một chút chi tiết hơn. Về cơ bản, nếu nó là một lớp hình dạng, bạn truy vấn đường dẫn của nó và xem nếu đường dẫn có chứa điểm ... Lưu ý, mặc dù, rằng bạn phải vượt qua điền vào loại như là một phần của CGPathContainsPoint - Tôi giả định ngay cả/lẻ. Sử dụng bất cứ điều gì bạn cần ... –
Điều này không làm việc cho các chạm trên biên giới nếu chiều rộng dòng lớn hơn 1. – jjxtra