Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 将CGRect从视图转换为superview不起作用_Ios_Objective C_Iphone_Uistackview - Fatal编程技术网

Ios 将CGRect从视图转换为superview不起作用

Ios 将CGRect从视图转换为superview不起作用,ios,objective-c,iphone,uistackview,Ios,Objective C,Iphone,Uistackview,我正在创建一个基于棋盘的棋盘游戏。 为了创建棋盘游戏,我做了以下操作: 想象一个棋盘被分成8列白色方块和方块 我创建了一个XIB来表示偶数列。XIB是一个由白色和黑色正方形组成的垂直视图 我创建了第二个XIB来表示奇数列。该XIB是黑白方块的垂直视图 在故事板上,我创建了board视图,并添加了这些列,偶数、奇数、偶数、奇数等,以表示具有8列(每个列有8个正方形)的完整板。所以我有这个: 现在我想得到一个正方形的框架,它位于其中一列的内部,并将其转换为电路板的框架参考 我在MyBoardView

我正在创建一个基于棋盘的棋盘游戏。 为了创建棋盘游戏,我做了以下操作:

  • 想象一个棋盘被分成8列白色方块和方块
  • 我创建了一个XIB来表示偶数列。XIB是一个由白色和黑色正方形组成的垂直视图
  • 我创建了第二个XIB来表示奇数列。该XIB是黑白方块的垂直视图
  • 在故事板上,我创建了board视图,并添加了这些列,偶数、奇数、偶数、奇数等,以表示具有8列(每个列有8个正方形)的完整板。所以我有这个:
  • 现在我想得到一个正方形的框架,它位于其中一列的内部,并将其转换为电路板的框架参考

    我在MyBoardView.m上执行此操作:

    CGRect convertedFrame = [self convertRect:[aSquare frame] toView:self];
    
    self
    是电路板视图,
    aSquare
    self
    内部堆栈中的一个正方形。这种转换没有效果
    convertedFrame
    等于
    [aSquare frame]


    我认为问题在于
    UIStackView
    不是一个视图。如何解决此问题?

    convertRect:toView:将接收器坐标系中的rect转换为其他坐标系。但是[aSquare frame]不在
    MyBoardView
    坐标系中,而是在superview的坐标系中(即中间的一个视图)。相反,尝试

    CGRect convertedFrame = [self convertRect:[aSquare bound] fromView:aSquare];
    
    这里要求
    MyBoardView
    aSquare
    坐标系中的一个Rect转换为其自身坐标系中的一个Rect。如果他们共享任何共同的superview,它将能够做到这一点

    顺便说一下,这与:

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

    fromView和toView之间的区别只是谁是接收者,谁是参数。(使用convertRect方法时,具有相同的调用方和参数是一个很大的危险信号)。

    convertRect:toView:将接收器坐标系中的rect转换为不同的坐标系。但是[aSquare frame]不在
    MyBoardView
    坐标系中,而是在superview的坐标系中(即中间的一个视图)。相反,尝试

    CGRect convertedFrame = [self convertRect:[aSquare bound] fromView:aSquare];
    
    这里要求
    MyBoardView
    aSquare
    坐标系中的一个Rect转换为其自身坐标系中的一个Rect。如果他们共享任何共同的superview,它将能够做到这一点

    顺便说一下,这与:

    CGRect convertedFrame = [aSquare convertRect:[aSquare bound] toView:self];
    
    fromView和toView之间的区别只是谁是接收者,谁是参数。(使用convertRect方法时,具有相同的调用方和参数是一个很大的危险信号)