Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在两点之间画一条线-如何通过UIView_Uiview_Drawing_Line_Cgcontextref - Fatal编程技术网

在两点之间画一条线-如何通过UIView

在两点之间画一条线-如何通过UIView,uiview,drawing,line,cgcontextref,Uiview,Drawing,Line,Cgcontextref,我试图画一条连接两点的简单线。我想我在drawLine方法中得到了正确的代码。根本没有线条出现,我很确定这与我打电话的视角和我想画的视角有关。下面的代码是我在代码中构建下一个视图的地方(数据来自web服务)。视图创建得很好,所有按钮和对象都出现了 我正在尝试向我正在动态创建(下一步)的视图添加行,但不确定如何完成。从我得到的错误(无效上下文0x0)来看,我似乎在做一些不正常的事情。试图在不存在的视图上显示。我怎样才能做到这一点?如有任何建议,将不胜感激 我意识到传递观点可能不是正确的答案。我在这

我试图画一条连接两点的简单线。我想我在drawLine方法中得到了正确的代码。根本没有线条出现,我很确定这与我打电话的视角和我想画的视角有关。下面的代码是我在代码中构建下一个视图的地方(数据来自web服务)。视图创建得很好,所有按钮和对象都出现了

我正在尝试向我正在动态创建(下一步)的视图添加行,但不确定如何完成。从我得到的错误(无效上下文0x0)来看,我似乎在做一些不正常的事情。试图在不存在的视图上显示。我怎样才能做到这一点?如有任何建议,将不胜感激

我意识到传递观点可能不是正确的答案。我在这里正处于试错之中

澄清一下:我在这里打电话给drawLine:

[nextView.view addSubview:next]

谢谢


我最后几天才想到这一点,我想我会在这里分享。在我的问题中,我可能添加了很多代码,但这些代码并没有帮助我将其简化为其他代码(没有注释)

归根结底,当试图画一条线时,您需要覆盖UIView子类的DrawRect方法,而不是像我那样覆盖UIViewController。如果从UIViewController调用DrawRect,但它不执行任何操作,则不会引发错误。我错过了那个小细节

要找到这个问题并解决这个问题,更复杂的是,我以编程方式创建了所有这些问题,并且最初根本没有将UIView子类化。在创建新视图后,我在以下类中添加了NSMutablearray中的所有点并重新绘制了线:

#import "draw.h"

@implementation draw
@synthesize lines;

- (id)initWithFrame:(CGRect)frame
{
   self = [super initWithFrame:frame];
if (self) 
{
// Initialization code
}
return self;
}

-(void)drawRect:(CGRect)rect
{

CGContextRef context = UIGraphicsGetCurrentContext();

for (line *myLine in lines)
{

    if ([myLine.color isEqualToString:@"255"])
             CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor);
    else if ([myLine.color isEqualToString:@"65535"])
                CGContextSetStrokeColorWithColor(context, [UIColor yellowColor].CGColor);
    else if ([myLine.color isEqualToString:@"GRAY"])
                CGContextSetStrokeColorWithColor(context, [UIColor grayColor].CGColor);
    else if ([myLine.color isEqualToString:@"BLACK"])
                CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor);
    int setNew = myLine.Width/4;

    CGContextSetLineWidth(context, (CGFloat)setNew);
    CGContextBeginPath(context);
    CGContextMoveToPoint(context, myLine.x1, myLine.y1);
    CGContextAddLineToPoint(context, myLine.x2, myLine.y2);
    CGContextStrokePath(context);
}
}
@end

我最后几天才想到这一点,我想我会在这里分享。在我的问题中,我可能添加了很多代码,但这些代码并没有帮助我将其简化为其他代码(没有注释)

归根结底,当试图画一条线时,您需要覆盖UIView子类的DrawRect方法,而不是像我那样覆盖UIViewController。如果从UIViewController调用DrawRect,但它不执行任何操作,则不会引发错误。我错过了那个小细节

要找到这个问题并解决这个问题,更复杂的是,我以编程方式创建了所有这些问题,并且最初根本没有将UIView子类化。在创建新视图后,我在以下类中添加了NSMutablearray中的所有点并重新绘制了线:

#import "draw.h"

@implementation draw
@synthesize lines;

- (id)initWithFrame:(CGRect)frame
{
   self = [super initWithFrame:frame];
if (self) 
{
// Initialization code
}
return self;
}

-(void)drawRect:(CGRect)rect
{

CGContextRef context = UIGraphicsGetCurrentContext();

for (line *myLine in lines)
{

    if ([myLine.color isEqualToString:@"255"])
             CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor);
    else if ([myLine.color isEqualToString:@"65535"])
                CGContextSetStrokeColorWithColor(context, [UIColor yellowColor].CGColor);
    else if ([myLine.color isEqualToString:@"GRAY"])
                CGContextSetStrokeColorWithColor(context, [UIColor grayColor].CGColor);
    else if ([myLine.color isEqualToString:@"BLACK"])
                CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor);
    int setNew = myLine.Width/4;

    CGContextSetLineWidth(context, (CGFloat)setNew);
    CGContextBeginPath(context);
    CGContextMoveToPoint(context, myLine.x1, myLine.y1);
    CGContextAddLineToPoint(context, myLine.x2, myLine.y2);
    CGContextStrokePath(context);
}
}
@end