在UIViewController上画一条线

时间:2010-06-09 06:14:25

标签: iphone uiviewcontroller opengl-es

我在iPhone上有一个带有UIViewController的应用程序,里面有一些东西..图像,文本框等... 有没有办法直接在UIViewController中使用opengl画一条线或类似的东西?

提前致谢

3 个答案:

答案 0 :(得分:6)

你确定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

答案 1 :(得分:1)

首先,我认为你应该知道UIView和UIViewController的职责。 UIView主要负责绘图(覆盖touchBegin,ToucheMove等),动画,管理子视图和处理事件; UIViewController主要负责加载,卸载视图等。

因此,您应该在自定义视图(UIView)中“绘制”此行,而不是视图控制器。

第二:如果你只需要显示一些简单的形状或线条。我建议你使用UI控件和图像。甚至不建议使用'drawRect',因为它会导致使用更多资源。当然OpenGL需要很多资源。

答案 2 :(得分:1)