Ios 如何理解应用旋转变换的UIView的框架?
在为应用了旋转变换的UIView执行下面的代码时,我遇到了一个奇怪的问题。我要做的是从superview中删除视图,然后将其插入特定视图下并恢复其框架: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* 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)