我正在创建一个基于国际象棋棋盘的棋盘游戏。 为了创建棋盘游戏,我做了这个:
UIStackView
的白色和黑色方块。UIStackView
黑白squares.column。`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
不是视图。我该如何解决?
答案 0 :(得分:2)
convertRect:toView:将接收器坐标系中的矩形转换为不同的坐标系。但是[aSquare frame]不在MyBoardView
坐标系中,它位于superview的坐标系中(即中间的一个视图)。而是尝试
CGRect convertedFrame = [self convertRect:[aSquare bound] fromView:aSquare];
这里要求MyBoardView
将aSquare
坐标系中的Rect转换为自己坐标系中的rect。如果他们共享任何共同的超级视图,它将能够做到。
CGRect convertedFrame = [aSquare convertRect:[aSquare bound] toView:self];
fromView和toView之间的区别仅在于谁是接收者,谁是参数。 (使用convertRect方法时,具有相同的调用者和参数是一个很大的红旗)。