2017-05-18 59 views
0

我正在創建基於棋盤的棋盤遊戲。 爲了創建棋盤遊戲,我做了這個:將CGRect從視圖轉換爲超級視圖不起作用

  1. 想象一下棋盤棋盤分爲8列白色和方塊。
  2. 我創建了一個XIB來表示偶數列。該XIB是白色和黑色正方形的垂直UIStackView
  3. 我創建了第二個XIB來表示奇數列。該XIB是黑色和白色squares.column垂直UIStackView
  4. 在故事板上我創建了板視圖並添加了這些列,甚至是奇數,偶數,奇數等,以表示包含8個8格的全部棋盤。所以我有這樣的:
`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 

現在我希望得到一個正方形就是裏面這些列之一的框架和將其轉換成板的參照系。

我這樣做就MyBoardView.m

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

self是板視圖,aSquare是一個正方形是一個堆棧是內部self內部。此轉換不起作用。 convertedFrame等於[aSquare frame]

我認爲問題在於UIStackView不是一個視圖。我如何解決這個問題?

回答

2

convertRect:toView:將接收器座標系中的矩形轉換爲不同的座標系。但[aSquare框架]不在MyBoardView座標系中,它位於其超視圖的座標系中(即位於中間的視圖之一)。相反,嘗試

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

這裏MyBoardView正在問轉換一個矩形是在aSquare的座標系中的矩形在自己的座標系。如果他們分享任何共同的超級觀點,它將能夠做到這一點。

這,順便說一句,可以等同於:

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

fromView和toView之間的區別只是誰是接收器,誰是參數。 (當使用convertRect方法時,具有相同的調用者和參數是一個大紅旗)。

+0

輝煌!謝謝!!!!! – SpaceDog

相關問題