2017-05-18 3 views
0

私はチェスボードに基づいたボードゲームを作成しています。CGRectをビューからスーパービューに変換すると動作しない

  1. は白とブロックの正方形の8列に分割チェスボードを想像: は、ボードゲームを作成するためには、私はこれをしませんでした。
  2. 偶数列を表すXIBを作成しました。そのXIBは白と黒の正方形の垂直のUIStackViewです。
  3. 奇数列を表す2番目のXIBを作成しました。そのXIBは黒と白の四角形の垂直のUIStackViewです。
  4. 私はボード・ビューを作成し、これらの列を追加します(奇数、偶数、奇数など)。だから私はこのている:
`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 

今、私はこれらの列の1の内部にある四角の枠を取得し、ボードのフレーム基準にそれを変換したいです。

私はMyBoardView.mでこれを行う:

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

selfaSquareself内部にあるスタック内にある1平方で、ボード図です。この変換は効果がありません。 convertedFrame[aSquare frame]に等しい。

私は問題はUIStackViewは表示ではないと思います。それをどうすれば解決できますか?

答えて

2

convertRect:toView:受信者の座標系にある矩形を別の座標系に変換します。しかし、[aSquare frame]はMyBoardView座標系にはありません。それはスーパービューの座標系にあります(つまり、中央にあるビューの1つです)。代わりにMyBoardViewはさんは、自身の座標系でRECTに座標系aSquareであるのRectを変換するように依頼されている。ここ

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

を試してみてください。彼らが共通のスーパービューを共有している場合は、それを行うことができます。

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

fromViewとtoView差がレシーバ、誰パラメータである人だけである。

これは、方法によって、同一であろう。 (convertRectメソッドを使用すると、同じ呼び出し元とパラメータが大きな赤いフラグになります)。

+0

brilliant!ありがとう!!!!! – SpaceDog

関連する問題