从drawRect中抽取UIView的边界

Ken*_*ker 20 iphone core-graphics objective-c drawrect

我的问题与此问题非常相似当clipToBounds = NO没有得到明确的答案时,没有绘制外界.

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

有没有办法在我的观点范围外画画?我试过更改clipsToBounds属性,但它似乎没有任何效果.

我不能从superview中绘制我的线条,因为我需要使用多个视图来执行此操作,有些将在其他视图之前...从superview的drawRect中找出图层看起来是个坏主意.

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

sly*_*rel 9

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

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

我不知道"Quartz Debug"(来自标准的apple developer tools安装 /Developer/Applications/Performance Tools/Quartz Debug)是否可以在模拟器中运行,但值得一试.它有一个模式,可以显示重绘的时间和频率,刷新时有边框和可选的延迟.

您可以按照自己的要求进行操作,但每次超出子视图边界时都需要强制重绘子视图,这意味着您的超级视图需要在其绘制函数内手动绘制它的子视图.基本上你会丢掉苹果的绘图范例,只是让你的子视图像主视图的绘图扩展一样.

此外,如果您的范围非常动态,您可能需要考虑以屏幕或超级视图的百分比而不是以点数绘制,这可能对代码更有意义.

  • 我有一个用例:我想绘制一个矩形,完美地调整其超视图的界限; 但我还想添加一个指向矩形下方的小三角形.为了有效地做到这一点,我需要从视图的边界绘制小三角形. (13认同)