使用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是从三个基本值得出的值:boundscentertransformframe的 setter 试图通过逆转该过程来做正确的事情,但是当设置了一个非身份transform时,它不一定总能正常工作。

在这一点上,documentation很清楚:



由于您的transform仅翻译 View ,因此我完全没有理由使用它。只需更改 View 框架的原点即可:

[view setFrame:CGRectMake(0, self.view.bounds.size.height - 100, self.view.bounds.size.width, 100)];

09-25 17:22
查看更多