使用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)]
这正常,正如预期的那样,但是当更改方向,并且重新运行此代码(重新调整视图大小)时,变换不会绘制,即使它被记录为视图的变换。换句话说,视图就在屏幕外,就像transform.ty是0一样。
Log message before re-draw: view.transform.ty -10.000000
Log message after re-draw: view.transform.ty -10.000000
任何帮助?
答案 0 :(得分:9)
视图的frame
是来自三个基本值派生的值:bounds
,center
和transform
。 frame
的setter尝试通过反转过程来做正确的事情,但是当设置了非身份transform
时,它无法始终正常工作。
documentation在这一点上非常明确:
如果transform属性不是identity变换,则值为 此属性未定义,因此应忽略。
...
如果transform属性包含非标识变换,则为该值 框架属性未定义,不应修改。在那里面 例如,您可以使用center属性重新定位视图并进行调整 使用bounds属性的大小。
由于您的transform
仅翻译了视图,因此我认为没有任何理由可以使用它。只需更改视图框架的原点:
[view setFrame:CGRectMake(0, self.view.bounds.size.height - 100, self.view.bounds.size.width, 100)];