2012-04-14 13 views
8

Stworzyłem wykres pajęczyny przez overiding draw rect, używam core grahics CAShapeLayer do rysowania moich obszarów, istnieje wiele regionów CAShapeLayer, które są tworzone na ekranie, chcę wykryć, która warstwa jest dotykana, gdy użytkownicy dotykają ... ale nie mogę się dowiedzieć, jak?Wykrywanie dotykowy CAShapeLayer

Odpowiedz

16

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

Hi Jody, można po prostu rozwinąć kod wewnątrz jeśli warunek, aby uzyskać więcej światła, – user1333444

+0

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

+0

To nie działa dla dotknięć na granicy, jeśli szerokość linii jest większa niż 1. – jjxtra

Powiązane problemy