Ich habe mehrere CAShapeLayers in einer Ansicht und ich möchte sie ziehen (die Formen sind unregelmäßig) Bitte geben Sie einige Vorschläge für die Durchführung.
Antwort
Zu viele Anzeigen?CALayer
und ihre Unterklassen sind nicht Teil der Responderkette und stammen nicht von UIResponder
. Deshalb, touchesBegan:withEvent:
usw. werden niemals bei einem CALayer
Unterklasse. Sie müssen die Berührung auf einem der Hosts erkennen UIView
s in der Ebenenhierarchie. Dann verwenden Sie hitTest:
in den Touch-Handlern, um zu erkennen, welche Ebene berührt wurde.
Es wird für Sie einfacher sein, wenn Sie eine UIView
Unterklasse mit einer CAShapeLayer
als Trägerschicht wie hier:
@implementation MyShapeView
- (CALayer *)layerClass {
return [CAShapeLayer class];
}
@end
Fügen Sie dann Instanzen Ihrer benutzerdefinierten Ansicht als Unteransichten zu Ihrer Hauptansicht hinzu. Danach können Sie die UIResponder
Methoden oder, noch besser, eine UIGestureRecognizer
um das Ziehen zu bewältigen. Ich empfehle dringend die Verwendung von Gestenerkennern, wenn Sie iOS 3.2 oder höher anvisieren können. Sie machen die Ereignisbehandlung viel einfacher.