2010-11-29 56 views
19

我的问题是非常相似,这一个Not drawing outside bounds when clipToBounds=NO它没有收到任何明确的答案。绘制的UIView的边界之外从的drawRect

基本上我有一个UIView,我要借鉴它的中心线上,到屏幕的边缘。计算其中,这些点是很容易,使用[self convertPoint:(CGPoint){0,0} fromView:[self superview]];(指找到原点相对于我的观点的上海华但当我吸取我的观点的drawRect一行:。它能够在我的视图边界裁剪

有没有一种办法绘制在我的视图的边界之外?我试过改变clipsToBounds属性,但它似乎没有任何效果。

我无法从超级视图中绘制我的线条,因为我需要使用多个视图有些会在别人面前...从superview的drawRect中找出图层似乎是一个糟糕的想法。

同样,我不认为我可以调整我的视图的边界以包含整个屏幕,因为我的意见需要动态地重新调整大小......界限必须巨大(> 20000平方米)才能发挥作用。

+0

为了记录在案,我去与兄弟姐妹视图,只是迷上所有我用它来重新排序以确保他们移动同级观点也方法。这使得性能更好,因为我的任何视图的最大尺寸都是屏幕的大小。 – 2010-11-30 04:04:33

回答

8

我不会推荐曾经绘制视图边界之外。您的视图需要自动调整大小以包含绘图,或者需要透明重叠视图。或两者。我想不出任何一种情况都不会涵盖的情况,但我可能缺乏想象力。 =)

可能的什么是目前发生的事情是,当超视图获取重绘它告诉它需要重绘,导致擦除你正在做外的绘制超级视图。已经有一段时间了,如果我错了,任何知识渊博的人都可以(应该)在这里纠正我。

我不知道“Quartz Debug”(来自标准的苹果开发者工具安装,/Developer/Applications/Performance Tools/Quartz Debug)是否可以在模拟器中工作,但值得一试。它有一个模式,会告诉你什么时候和多长时间进行一次重绘,刷新时会有边界和可选延迟。

你可以做你在问什么,但是你需要强制重绘你的子视图,每次你超出子视图的界限时,这意味着你的超级视图需要在其绘图函数内手动绘制子视图。本质上,你会抛出苹果的绘图范例,并简单地让你的子视图像主视图的绘图扩展一样。

此外,如果你的范围是如此的动态,你可能要考虑在分屏或超视图,而不是比例绘制,可能更有意义的代码。

+0

感谢您的建议。从不同的角度来看问题很有帮助。我与兄弟姐妹的意见。 – 2010-11-30 04:05:55