Die Prüffunktion ist vollständig von anderen Ansichten abgedeckt

9

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!

    
Eager Logic 11.06.2015, 09:09
quelle

3 Antworten

2

Sie können accumulatedPath mit dieser Antwort konstruieren Bestimmen Sie, ob UIView ist von anderen Ansichten abgedeckt? mit dieser Methode:

%Vor%

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; :

eine weitere Schleife hinzufügen %Vor%

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.

%Vor%

Für Kreise empfehle ich die erste Lösung zu verwenden, für zufällige Formen - zweite Lösung.

    
k06a 20.06.2015, 09:55
quelle
1

Um die UIBezierPath der Ansichten zu erhalten, können Sie diese Methode verwenden:

%Vor%

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.

    
pteofil 15.06.2015 12:20
quelle
0

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.

    
Rajesh 15.06.2015 12:46
quelle

Tags und Links