2017-05-18 8 views
0

Ich erstelle ein Brettspiel, das auf dem Schachbrett basiert. Um das Brettspiel zu schaffen, ich dies tat:Umwandlung eines CGRect von einer Ansicht in Superview funktioniert nicht

  1. ein Schachbrett Stellen in 8 Spalten von weißen und Block Quadrate unterteilt.
  2. Ich habe ein XIB erstellt, um die geraden Spalten darzustellen. Das XIB ist eine vertikale UIStackView von weißen und schwarzen Quadraten.
  3. Ich habe ein zweites XIB erstellt, um die ungeraden Spalten darzustellen. Diese XIB ist eine vertikale UIStackView von schwarzen und weißen Quadraten.
  4. auf dem Storyboard Ich erstellen die Board-Ansicht und fügen Sie diese Spalten, gerade, ungerade, gerade, ungerade usw., um die Vollpension mit 8 Spalten mit jeweils 8 Quadrate darzustellen. Also ich habe dies:
`BOARD VIEW` 
    | 
    ├─ EVEN COLUMN VERTICAL UISTACKVIEW with 8 vertical squares 
    ├─ ODD COLUMN VERTICAL UISTACKVIEW with 8 vertical squares 
    ├─ EVEN COLUMN VERTICAL UISTACKVIEW with 8 vertical squares 
    ├─ ODD COLUMN VERTICAL UISTACKVIEW with 8 vertical squares 
    ├─ EVEN COLUMN VERTICAL UISTACKVIEW with 8 vertical squares 
    ├─ ODD COLUMN VERTICAL UISTACKVIEW with 8 vertical squares 
    ├─ EVEN COLUMN VERTICAL UISTACKVIEW with 8 vertical squares 
    └─ ODD COLUMN VERTICAL UISTACKVIEW with 8 vertical squares 

Jetzt möchte ich den Rahmen eines Quadrats erhalten, die in einer dieser Spalten ist und dass der Vorstand mit dem Rahmen Referenz zu konvertieren.

ich dies auf MyBoardView.m:

CGRect convertedFrame = [self convertRect:[aSquare frame] toView:self]; 

self die Platine Ansicht ist, aSquare ist ein Quadrat, das innerhalb eines Stapels ist, der innerhalb self ist. Diese Konvertierung hat keine Auswirkungen. convertedFrame entspricht [aSquare frame].

Ich denke, dass das Problem ist, dass UIStackView ist keine Ansicht. Wie löse ich das?

Antwort

2

convertRect: toView: Konvertiert ein Rect, das sich im Koordinatensystem des Empfängers befindet, in ein anderes Koordinatensystem. Aber [aSquare frame] ist nicht in MyBoardView Koordinatensystem es ist in seinem superview Koordinatensystem (dh eine der Ansicht, die in der Mitte sind). Stattdessen versuchen

CGRect convertedFrame = [self convertRect:[aSquare bound] fromView:aSquare]; 

Hier MyBoardView sein wird fragen Sie einen Rect konvertieren, die in aSquare ist ‚s System zu einem rect in einem eigenen Koordinatensystem. Wenn sie eine gemeinsame Superview teilen, wird es in der Lage sein, es zu tun. Diese, übrigens

, wäre identisch mit:

CGRect convertedFrame = [aSquare convertRect:[aSquare bound] toView:self]; 

der Unterschied zwischen fromView und toview ist nur, wer der Empfänger ist und wer ist der Parameter. (Derselbe Aufrufer und Parameter ist eine große rote Flagge bei der Verwendung von convertRect-Methoden).

+0

brilliant! Vielen Dank!!!!! – SpaceDog

Verwandte Themen