2010-12-16 8 views
2

Ich habe mehrere CAShapeLayers in einer Ansicht und möchte sie ziehen (die Form ist unregelmäßig) Bitte geben Sie einige Vorschläge dafür.Gibt es hitTest: (CGPoint) in CAShapeLayer?

+0

Da CAShapeLayer von CALayer erbt, sollten Sie sie mit hitTest greifen können. –

+0

Hallo Alec, ich kann den Test nicht erkennen, was ich tue ist, während ich den CAShapelayer dort berührt habe, wurde kein Ereignis bei touchBegans ausgelöst: withEvent: in der Unterklasse von CAshapelayer. – theDebugger

Antwort

0

CALayer und ihre Unterklassen sind nicht Teil der Responder-Kette, und sie stammen nicht von UIResponder. Daher wird touchesBegan:withEvent: usw. niemals auf einer Unterklasse CALayer aufgerufen. Sie müssen die Berührung auf einem der Hosts in der Ebenenhierarchie UIView erkennen. Dann verwenden Sie hitTest: in den Touchhandlern, um zu erkennen, welche Schicht berührt wurde.

Es wird auf Sie einfacher, wenn Sie eine UIView Unterklasse mit einem CAShapeLayer als Trägerschicht wie folgt zu erstellen:

@implementation MyShapeView 

- (CALayer *)layerClass { 
    return [CAShapeLayer class]; 
} 

@end 

Dann fügen Sie Instanzen der benutzerdefinierten als Subviews Ihre Hauptansicht Ansicht. Danach können Sie die Methoden UIResponder oder, noch besser, eine UIGestureRecognizer verwenden, um das Ziehen zu behandeln. Ich empfehle die Verwendung von Gestenerkennung, wenn Sie iOS 3.2 oder höher als Ziel verwenden können. Sie machen die Ereignisbehandlung viel einfacher.

+0

danke neror, ich werde das versuchen und wiederkommen ... – theDebugger