我在iPhone上有一个带有UIViewController的应用程序,里面有一些东西..图像,文本框等... 有没有办法直接在UIViewController中使用opengl画一条线或类似的东西?
提前致谢
答案 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)