Iphone 在UIView'外部绘制;drawRect的s边界

Iphone 在UIView'外部绘制;drawRect的s边界,iphone,objective-c,core-graphics,drawrect,Iphone,Objective C,Core Graphics,Drawrect,我的问题与这个问题非常相似,没有得到明确的答案 基本上我有一个UIView,我想画一条从它的中心到屏幕边缘的线。使用[self-convertPoint:(CGPoint){0,0}fromView:[self-superview]]计算这些点的位置很容易(相对于我的视图的superview查找原点。但是当我从视图的drawRect绘制一条线时:它会在我的视图边界处被剪裁 有没有一种方法可以在视图边界之外进行绘制?我已经尝试更改clipsToBounds属性,但似乎没有任何效果 我不能从supe

我的问题与这个问题非常相似,没有得到明确的答案

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

有没有一种方法可以在视图边界之外进行绘制?我已经尝试更改clipsToBounds属性,但似乎没有任何效果

我不能从superview中画线,因为我需要用多个视图来画,有些视图会在其他视图前面…从superview的drawRect中找出图层似乎是个坏主意


类似地,我不认为我可以只调整视图的边界以包括整个屏幕,因为我的视图需要动态地重新调整大小…边界必须是巨大的(>20000平方点)要使其正常工作。

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

当前可能发生的情况是,当超级视图重新绘制时,它会告诉超级视图它需要重新绘制,从而删除您在外部进行的绘制。已经有一段时间了,如果我错了,任何更有知识的人都可以(应该!)在这里纠正我

我不知道“Quartz Debug”(从标准的apple开发者工具安装中,
/developer/Applications/Performance tools/Quartz Debug
)是否能在模拟器中工作,但值得一试。它有一个模式,可以显示重画的时间和频率,刷新时有边框和可选延迟

您可以按要求执行操作,但每次超出子视图的边界时,都需要强制重新绘制子视图,这意味着您的超级视图需要在其绘图函数内手动绘制其子视图。从本质上讲,您将抛弃apple的绘图范例,而只是简单地使您的子视图充当主视图的绘图扩展


另外,如果你的范围是动态的,你可能想考虑绘制屏幕或超级视图的百分比而不是点,这可能对代码更有意义。

对于记录,我用一个兄弟视图,并且钩住了我用来重新排序视图的所有方法,以确保它们也移动了兄弟视图。这提高了性能,因为我的任何视图的最大大小都是屏幕的大小。谢谢你的建议。从不同的角度看待这个问题是有帮助的。我使用了同级视图,我有一个用例:我想画一个矩形,它的大小可以完全调整到superview的边界;但我还想添加一个小三角形,指向矩形下方。为了有效地执行此操作,我需要在视图的边界外绘制小三角形。