23

我的问题与这个Not draw outside bounds when clipToBounds=NO非常相似,它没有收到明确的答案。

基本上我有一个 UIView,我想从它的中心画一条线,到屏幕的边缘。计算这些点的位置很容易,使用[self convertPoint:(CGPoint){0,0} fromView:[self superview]];(它找到相对于我的视图的超级视图的原点。但是当我从我的视图的 drawRect 中画一条线时:它会在我的视图边界处被剪裁。

有没有办法在我的视野范围之外进行绘制?我尝试更改 clipsToBounds 属性,但似乎没有任何效果。

我无法从超级视图中画线,因为我需要使用多个视图来执行此操作,并且有些视图会在其他视图之前......从超级视图的 drawRect 中找出图层似乎是个坏主意。

同样,我认为我不能只调整视图的边界以包括整个屏幕,因为我的视图需要动态调整大小......边界必须是巨大的(> 20,000 平方)才能工作.

4

1 回答 1

10

我不建议在视图范围之外进行绘制。您的视图需要自动调整大小以包含您的绘图,或者您需要具有透明的重叠视图。或两者。我想不出这两种情况都不会涵盖的情况,但我可能缺乏想象力。=)

当前可能发生的情况是,当超级视图被重绘时,它会告诉超级视图它需要重绘,从而导致擦除您在外面所做的绘图。已经有一段时间了,如果我错了,任何知识渊博的人都可以(应该!)在这里纠正我。

我不知道“Quartz Debug”(来自标准的苹果开发者工具安装 /Developer/Applications/Performance Tools/Quartz Debug)是否在模拟器中工作,但值得一试。它有一种模式,可以显示重绘的时间和频率,刷新时带有边框和可选延迟。

您可以按照您的要求进行操作,但是每次超出子视图的边界时都需要强制重绘子视图,这意味着您的超级视图需要在其绘图功能内手动绘制其子视图。本质上,您将抛弃苹果的绘图范例,而只是使您的子视图充当主视图的绘图扩展。

此外,如果您的范围如此动态,您可能需要考虑以屏幕或超级视图的百分比而不是点来绘制,那么编码可能更有意义。

于 2010-11-29T04:52:24.877 回答