Ich habe ein UIView
, dass ich seine Ebene angepasst habe, damit sie als Kreis erscheint. ( view.layer.cornerRadius = view.frame.size.height/2
)
Es gibt auch n
andere kleinere Kreise, die auf diese Weise erstellt wurden.
Das Ziel des Benutzers ist es, den ersten Kreis mit den kleineren Kreisen durch Ziehen und Ablegen über den Kreis vollständig zu bedecken.
Wie kann ich überprüfen, ob der große Kreis vollständig abgedeckt wurde?
Ich habe diese Frage untersucht Ermitteln, ob UIView von anderen abgedeckt wird views? , aber ich bin mir nicht sicher, wie man UIBezierPath
des Ansichten-Layers erhält.
Jede Hilfe ist willkommen, Danke!
Sie können accumulatedPath
mit dieser Antwort konstruieren Bestimmen Sie, ob UIView ist von anderen Ansichten abgedeckt? mit dieser Methode:
Dann können Sie einige Punkte auf Ihrem Sichtkreis aufzählen und nach dem Pfad fragen:
%Vor%Beispielcode:
%Vor%Dieser Algorithmus verwendet 720 Punkte auf den Begrenzungslinien und dem Mittelpunkt des Kreises. Mehr Punkte, die Sie verwenden werden - genauere Ergebnisse, die Sie erhalten.
Aber es gibt eine mögliche Situation, wenn die Grenzlinie versteckt ist und die Mitte verborgen ist, aber ein Teil ist sichtbar. Daher können wir dieser Methode vor return YES;
:
Sie können den Gitterschritt auch für genauere Ergebnisse konfigurieren.
UPDATE:
Hier ist es gängiger, zu überprüfen, ob eine UIBezierPath
vollständig mit einer anderen UIBezierPath
überlappt ist. Das dritte Argument hilft Ihnen, ein genaueres Ergebnis zu erhalten. Versuchen Sie, Werte wie 10, 100 zu verwenden.
Für Kreise empfehle ich die erste Lösung zu verwenden, für zufällige Formen - zweite Lösung.
Um die UIBezierPath
der Ansichten zu erhalten, können Sie diese Methode verwenden:
Verwenden Sie den Ansichtsrahmen als das Rect. Da Ihre Ansichten quadratisch sind, erhalten Sie eine UIBezierPath
, die Ihrem Kreis entspricht.
Sie kombinieren dann Ihren gesamten Pfad zu einem Pfad, den Sie mit dem ursprünglichen Kreispfad vergleichen.
Es gäbe eine andere mögliche Lösung, um den Bezier-Pfad einer Ansicht zu erhalten. Sie sollten eine UIView-Klasse erstellen. Machen Sie diese Klasse zu einem Elternteil Ihrer gesamten Kreisansicht. Deklarieren Sie außerdem einen UIBezierPath als Eigenschaft. Wenn Sie eine Kreisansicht erstellen, weisen Sie den Bezierpfad zu. Wenn Sie Ihre Ansicht das nächste Mal berühren, können Sie ihren Pfad abrufen, indem Sie auf seine Eigenschaft zugreifen.
Tags und Links objective-c ios