首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在drawRect的UIView边界之外绘制

在drawRect的UIView边界之外绘制
EN

Stack Overflow用户
提问于 2010-11-29 12:17:30
回答 1查看 9.5K关注 0票数 23

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

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

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

我不能从superview中画出我的线条,因为我需要用多个视图来做这件事,其中一些会在其他视图的前面。从superview的drawRect中找出图层似乎不是一个好主意。

类似地,我不认为我可以仅仅调整我的视图的边界来包括整个屏幕,因为我的视图需要动态地调整大小...边界必须很大(>20,000点平方)才能起作用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-11-29 12:52:25

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

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

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

你可以按你的要求去做,但是每次你离开子视图的边界时,你需要强制重绘子视图,这意味着你的超级视图需要在它的draw函数中手动绘制它的子视图。从本质上讲,你将抛弃苹果的绘图范例,只是简单地让你的子视图表现得像你的主视图的绘图扩展。

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

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4300824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档