5

使用 setFrame 重绘框架后,我的变换未绘制。

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

首先,我通过执行 a 来绘制视图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)]

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

Log message before re-draw: view.transform.ty -10.000000
Log message after re-draw: view.transform.ty -10.000000

有什么帮助吗?

4

1 回答 1

10

视图frame是从三个基本值派生bounds的值: 、centertransform。setterframe尝试通过反转过程来做正确的事情,但是当设置非身份时,它不能总是正确地工作transform

文档在这一点上非常清楚:

如果变换属性不是恒等变换,则此属性的值未定义,因此应被忽略。

...

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

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

[view setFrame:CGRectMake(0, self.view.bounds.size.height - 100, self.view.bounds.size.width, 100)];
于 2013-01-06T08:49:49.440 回答