2012-04-14 35 views
8

Tôi đã tạo ra một biểu đồ nhện bằng cách vẽ dọc rect, tôi đang sử dụng lõi grahics CAShapeLayer để vẽ vùng của mình, có nhiều vùng CAShapeLayer được tạo trên màn hình, tôi muốn phát hiện lớp nào được chạm khi người dùng chạm vào ... nhưng tôi không thể hiểu được làm thế nào?phát hiện ra CAShapeLayer chạm vào

Trả lời

16

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; 
       } 
      } 
     } 
    } 
} 
+0

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

+0

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 ... –

+0

Đ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

Các vấn đề liên quan