iPhone korrekte Landschaft Fensterkoordinaten

8

Ich versuche, die Fensterkoordinaten einer Tabellenansicht mit dem folgenden Code zu erhalten:

[self.tableView.superview convertRect:self.tableView.frame toView:nil]

Es meldet die korrekten Koordinaten im Hochformat, aber wenn ich in Querformat rotiere, meldet es keine korrekten Koordinaten mehr. Zunächst werden die XY-Koordinaten und die Breite und Höhe gekippt. Das ist aber nicht wirklich das Problem. Das eigentliche Problem ist, dass die Koordinaten falsch sind. Im Hochformat sind die Fensterkoordinaten für den Rahmen der Tabellenansicht {{0, 114}, {320, 322}}, während im Querformat die Fensterkoordinaten {{32, 0}, {204, 480}} sind. Offensichtlich ist der x-Wert hier falsch, oder? Sollte es nicht 84 sein? Ich suche nach einer Lösung für dieses Problem, und wenn jemand weiß, wie man die richtigen Fenster Koordinaten einer Ansicht im Querformat erhält, würde ich es sehr schätzen, wenn Sie dieses Wissen mit mir teilen würden.

Hier sind einige Screenshots, damit Sie das Layout der Ansicht sehen können.

Porträt: Ссылка

Landschaft: Ссылка

    
EJV 17.05.2011, 17:16
quelle

5 Antworten

6

Ich habe das gefunden, was ich für den Anfang der Lösung halte. Es scheint, dass die Koordinaten, die du und ich sehen, auf der unteren linken oder oberen rechten Seite basieren, abhängig davon, ob die Ausrichtung UIInterfaceOrientationLandscapeRight oder UIInterfaceOrientationLandscapeLeft ist.

Ich weiß noch nicht warum, aber hoffentlich hilft das. :)

[UPDATE] Also ich denke, der Ursprung des Fensters ist 0,0 im normalen Hochformat und dreht sich mit dem ipad / iphone.

Also hier ist, wie ich das gelöst habe.

Zuerst greife ich meine Orientierung, Fenstergrenzen und die Rechte meiner Ansicht innerhalb des Fensters (mit den verwackelten Koordinaten)

%Vor%

Wenn die Ausrichtung Landscape ist, vertausche ich die x- und y-Koordinaten und die Breite und Höhe

%Vor%

Dann rufe ich meine Funktion an, um den Ursprung auf der linken oberen Seite zu fixieren, unabhängig von der Drehung des ipad / iphone. Es fixiert den Ursprung abhängig davon wo 0,0 aktuell lebt (abhängig von der Orientierung)

%Vor%

Hier sind die zwei Funktionen, die ich benutze

%Vor%     
Bob Spryn 19.07.2011 07:46
quelle
3

Das ist ein Hack, aber es funktioniert für mich:

%Vor%

Ich bin mir nicht sicher, ob das die beste Lösung ist. Es funktioniert möglicherweise nicht zuverlässig, wenn der Root View-Controller nicht die gleichen Ausrichtungen wie der aktuelle View-Controller unterstützt.

    
jcampbell1 03.02.2014 21:01
quelle
0

Sie sollten die aktuellen Tabellenansichtskoordinaten von selb.tableView.bounds

abrufen können     
jaminguy 17.05.2011 19:36
quelle
0

Ihr Code sollte lauten:

%Vor%

Damit erhalten Sie das Rechteck der Ansicht im Koordinatensystem des Fensters. Stellen Sie sicher, dass Sie "Grenzen" und nicht "Rahmen" verwenden. Frame ist das Rechteck der Ansicht im Koordinatensystem der übergeordneten Ansicht. "Grenzen" ist das Ansichtsrechteck in seinem eigenen System. Daher fordert der obige Code die Tabellenansicht auf, ein eigenes Rechteck von seinem eigenen System in das System des Fensters zu konvertieren. Ihr vorheriger Code forderte die übergeordnete Ansicht der Tabelle auf, das Rechteck der Tabelle vom übergeordneten Koordinatensystem in nichts zu konvertieren.

    
Dancreek 17.05.2011 20:03
quelle
0

Versuche Grenzen statt Rahmen %Code% denn es gibt mir angepasste Coords entsprechend der aktuellen Orientierung

    
yasirmturk 24.01.2012 10:35
quelle