iOS,setTransform被setFrame覆盖?重新运行setFrame后转换不重新绘制

Mrw*_*lfy 5 uiview screen-orientation cgaffinetransform ios

使用setFrame重绘帧后,我的变换不会绘制.

我在使用setFrame更改方向时缩放视图.但是这个视图还需要根据BOOL参数改变位置:On = up in view,off = down off screen.我setTransform用来调整视图的位置.

首先,我通过做一个绘制视图setFrame.这会在底部的屏幕上绘制100点视图.然后我设置一个变换(ty上的-100)将它带到视点(只要BOOL设置为TRUE,否则变换为0,视图不在屏幕上).

[view setFrame:CGRectMake(0, self.view.bounds.size.height, self.view.bounds.size.width, 100)];
[view setTransform:CGAffineTransformMake(1, 0, 0, 1, 0, -100)]
Run Code Online (Sandbox Code Playgroud)

这正常,正如预期的那样,但是当更改方向,并且重新运行此代码(重新调整视图大小)时,即使将Logged视为视图的变换,也不会绘制变换.换句话说,视图就在屏幕外,就像transform.ty为0一样.

Log message before re-draw: view.transform.ty -10.000000
Log message after re-draw: view.transform.ty -10.000000
Run Code Online (Sandbox Code Playgroud)

有帮助吗?

Kur*_*vis 9

视图的frame是一个值导出从三个基本值:bounds,center,和transform.frame尝试通过反转过程来做正确的事情的setter ,但是当设置了非身份时它不能总是正常工作transform.

关于这一点,文档非常明确:

如果transform属性不是identity变换,则此属性的值是未定义的,因此应该被忽略.

...

如果transform属性包含非标识变换,则frame属性的值是未定义的,不应修改.在这种情况下,您可以使用center属性重新定位视图,并使用bounds属性调整大小.

由于您transform只翻译了视图,因此我认为没有任何理由可以使用它.只需更改视图框架的原点:

[view setFrame:CGRectMake(0, self.view.bounds.size.height - 100, self.view.bounds.size.width, 100)];
Run Code Online (Sandbox Code Playgroud)