使用setFrame重绘框架后,我的变换不绘制。
当使用setFrame更改方向时,我正在缩放 View 。但是,此 View 还需要根据BOOL
参数更改位置:“开” =在 View 中向上,“关闭” =在屏幕上向下。我使用setTransform
调整 View 的位置。
首先,我通过执行setFrame
来绘制 View 。这将 View 从屏幕的底部绘制了100个点。然后,我设置一个转换(在ty上为-100)以将其带入视点(只要将BOOL
设置为TRUE
,否则该转换为0且 View 不在屏幕上)。
[view setFrame:CGRectMake(0, self.view.bounds.size.height, self.view.bounds.size.width, 100)];
[view setTransform:CGAffineTransformMake(1, 0, 0, 1, 0, -100)]
如预期的那样,此方法运行良好,但是当更改方向时,并且重新运行此代码(以调整 View 的大小),即使绘制为 View 的变换,也不会绘制该变换。换句话说, View 就在屏幕外,就像transform.ty为0一样。
Log message before re-draw: view.transform.ty -10.000000
Log message after re-draw: view.transform.ty -10.000000
有什么帮助吗?
最佳答案
View 的frame
是从三个基本值得出的值:bounds
,center
和transform
。 frame
的 setter 试图通过逆转该过程来做正确的事情,但是当设置了一个非身份transform
时,它不一定总能正常工作。
在这一点上,documentation很清楚:
由于您的transform
仅翻译 View ,因此我完全没有理由使用它。只需更改 View 框架的原点即可:
[view setFrame:CGRectMake(0, self.view.bounds.size.height - 100, self.view.bounds.size.width, 100)];