在 UIViewController 上画一条线
Posted
技术标签:
【中文标题】在 UIViewController 上画一条线【英文标题】:Draw a line over UIViewController 【发布时间】:2010-06-09 06:14:24 【问题描述】:我在 iPhone 上有一个带有 UIViewController 的应用程序,里面有一些东西......图像、文本框等...... 有没有办法直接在 UIViewController 内使用 opengl 画一条线或类似的东西?
提前致谢
【问题讨论】:
为什么只需要OpenGL来画一条线?为什么不直接使用 UIView? 例如,如何在图像上的 UIViewController 中画一条线? 【参考方案1】:你确定是 OpenGL 吗?
我相信在常规视图之上使用 OpenGL 是不可能的。
您可以在所有其他视图之上添加一个自定义视图(从 UIView 继承)并在该视图上绘制您想要的任何内容。 此视图应具有透明背景色。 此外,如果您想与其他视图交互(点击按钮、编辑文本视图、滚动等),那么您必须在自定义视图中实现 hitTest 方法,以便将触摸事件传递给位于的视图在这个...
编辑:不要乱用 hitTest。只需取消选中 XIB 中启用的用户交互...
编辑:代码示例:
@interface TransparentDrawingView : UIView
CGPoint fromPoint;
CGPoint toPoint;
- (void)drawLineFrom:(CGPoint)from to:(CGPoint)to;
@end
@implementation TransparentDrawingView
- (void)initObject
// Initialization code
[super setBackgroundColor:[UIColor clearColor]];
- (id)initWithFrame:(CGRect)frame
if (self = [super initWithFrame:frame])
// Initialization code
[self initObject];
return self;
- (id)initWithCoder:(NSCoder *)aCoder
if (self = [super initWithCoder:aCoder])
// Initialization code
[self initObject];
return self;
- (void)drawRect:(CGRect)rect
// Drawing code
// Draw a line from 'fromPoint' to 'toPoint'
- (void)drawLineFrom:(CGPoint)from to:(CGPoint)to
fromPoint = from;
toPoint = to;
// Refresh
[self setNeedsDisplay];
@end
【讨论】:
谢谢迈克尔......我的目标是在图像上画一条线......谢谢 查看我添加到答案中的代码示例。将此视图用作您的自定义视图,该视图将传播到其余视图之上的整个窗口。在drawRect:
方法中填写绘图代码...【参考方案2】:
首先我认为你应该知道 UIView 和 UIViewController 的职责。 UIView主要负责绘图(覆盖touchBegin、ToucheMove等)、动画、管理子视图、处理事件; UIViewController 主要负责加载、卸载视图等。
因此,您应该在自定义视图 (UIView) 上“绘制”这条线,而不是视图控制器。
第二:如果只需要显示一些简单的形状或线条。我建议您使用 UI 控件和图像。甚至不推荐使用“drawRect”,因为它会导致使用更多资源。当然OpenGL需要很多资源。
【讨论】:
您可以将视图拖动为任何形状,例如100像素宽,1像素高的矩形,将其背景颜色设置为黑色。它应该看起来像一条线。 :) 然后你可以把这条“线”作为你的 imageview 的子视图。 ghiboz,在这种情况下,我认为您应该改用 PNG。我建议的原则是:使您的解决方案尽可能简单。我们应该避免使用复杂的方法来解决简单的问题。 :) 我并不是说不应该使用 OpenGL。另一方面,它是一个非常强大的工具,但不是那么容易处理,并且会占用大量系统资源。【参考方案3】:答案很简单,你必须创建一个扩展 UIView 的新类,并重写 drawRect 函数才能绘制(使用 Quartz...)你的线条。如果您也想要渐变背景,请使用此方法。
我也在使用 Adobe Flex 4 进行开发,我注意到 iPhone SDK 没有像 Flex 4 那样的皮肤和布局“模式”(例如,UIView 可能有一个皮肤(在一个单独的文件中......)和一个布局(水平、垂直、平铺......)),对我来说这是一个可怕的缺乏!
开源库 Three20 试图将其引入 iPhone SDK。
【讨论】:
以上是关于在 UIViewController 上画一条线的主要内容,如果未能解决你的问题,请参考以下文章