Ich habe eine UIView, in der ich UIButtons arrangiert habe. Ich möchte die Positionen dieser UIButtons finden.
Ich bin mir bewusst, buttons.frame
dass ich die Positionen erhalten werde, aber es gibt mir Positionen nur in Bezug auf die unmittelbare Aufsicht.
Gibt es eine Möglichkeit, die Positionen dieser Schaltflächen in Bezug auf die Übersicht von UIButtons zu finden?
Angenommen, es gibt UIView mit dem Namen "firstView".
Dann habe ich eine andere UIView, "secondView". Diese "SecondView" ist eine Unteransicht von "firstView".
Dann habe ich UIButton als Unteransicht auf der "secondView".
->UIViewController.view
--->FirstView A
------->SecondView B
------------>Button
Gibt es eine Möglichkeit, die Position dieses UIButton in Bezug auf "firstView" zu finden?
Obwohl nicht spezifisch für die Schaltfläche in der Hierarchie, wie gefragt, fand ich dies einfacher zu visualisieren und zu verstehen:
Von hier: Originalquelle
Objekt:
Schnell:
quelle
Aktualisiert für Swift 3
quelle
Rahmen: (X, Y, Breite, Höhe).
Daher ändern sich Breite und Höhe auch in der Super-Super-Ansicht nicht. Sie können das X, Y wie folgt leicht erhalten.
quelle
Wenn mehrere Ansichten gestapelt sind und Sie keine möglichen Ansichten zwischen den Ansichten kennen möchten (oder möchten), können Sie Folgendes tun:
Wo
targetView
wäre der Knopf,baseView
wäre derViewController.view
.Diese Funktion versucht Folgendes:
Wenn
targetView
keine Superansicht vorhanden ist, wird die aktuelle Koordinate zurückgegeben.Wenn
targetView's
die Superansicht nicht die Basisansicht ist (dh zwischen der Schaltfläche und befinden sich andere Ansichtenviewcontroller.view
), wird eine konvertierte Koordinate abgerufen und an die nächste übergebensuperview
.Dies wird auch weiterhin durch den Stapel von Ansichten durchgeführt, die sich in Richtung baseView bewegen.
Sobald es das erreicht
baseView
, führt es eine letzte Konvertierung durch und gibt sie zurück.Hinweis: Es wird keine Situation behandelt, in der
targetView
sich unter der Position befindetbaseView
.quelle
UIView-Erweiterung zum Konvertieren des Frames der Unteransicht (inspiriert von der @ Rexb-Antwort).
quelle
Sie können die Super-Super-Ansicht wie folgt erhalten.
secondView -> [Schaltflächenübersicht]
firstView -> [[Schaltflächenübersicht] Übersicht]
Dann können Sie die Position der Schaltfläche erhalten.
Sie können dies verwenden:
quelle