Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.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 如何理解应用旋转变换的UIView的框架?_Ios_Objective C_Uiview_Cgaffinetransform - Fatal编程技术网

Ios 如何理解应用旋转变换的UIView的框架?

Ios 如何理解应用旋转变换的UIView的框架?,ios,objective-c,uiview,cgaffinetransform,Ios,Objective C,Uiview,Cgaffinetransform,在为应用了旋转变换的UIView执行下面的代码时,我遇到了一个奇怪的问题。我要做的是从superview中删除视图,然后将其插入特定视图下并恢复其框架: UIView* movedView= [self.views objectAtIndex:newIndex]; center = movedView.center; CGRect oldFrame = movedView.frame; //find the layer on top and insert the

在为应用了旋转变换的UIView执行下面的代码时,我遇到了一个奇怪的问题。我要做的是从superview中删除视图,然后将其插入特定视图下并恢复其框架:

  UIView* movedView=  [self.views objectAtIndex:newIndex];
    center = movedView.center;

   CGRect oldFrame  = movedView.frame;

    //find the layer on top and insert the moved view under that
    UIView* coveringView = [self.views objectAtIndex:newIndex-1];
    [movedView removeFromSuperview];
    [self.view insertSubview:movedView belowSubview:coveringView];
    movedView.frame = oldFrame;
我希望该视图在操作后会显示在相同的位置,但它会根据通过CgaffinetTransformMakeRotation()应用的旋转量进行移动

通过将指定帧的调用替换为指定中心属性的调用,我获得了所需的行为。这让我思考——当UIView的框架旋转时,我如何理解它发生了什么是否有一个好的教程或其他东西可以帮助我从概念上理解变换如何影响UIView的框架?

这样说:

警告:如果
transform
属性不是标识转换,则此属性的值未定义,因此应忽略

这是:

对该属性的更改可以设置动画。但是,如果
transform
属性包含非标识转换,则
frame
属性的值未定义,不应修改。在这种情况下,可以使用
center
属性重新定位视图,并改为使用
bounds
属性调整大小


因此,您可能根本不想考虑
frame
属性,因为您的
转换
不是身份。

CGAffineTransform
之后,
UIView
frame
属性不再定义。“警告:如果转换属性不是标识转换,则此属性的值未定义,因此应忽略。”

在我看来,
是由
中心
转换
边界
计算的

就像公式一样:
frame=f(中心、变换、边界)
。但是我不知道
f(x)