0

我开始学习 Xcode,但我不明白如何在视图中画一条线,当我按下按钮时,我有这个代码

- (void)drawRect:(CGRect)rect
{        
 CGContextRef con = UIGraphicsGetCurrentContext();
 CGContextSetLineWidth(con, 5);
 CGColorSpaceRef space = CGColorSpaceCreateDeviceRGB();
 CGFloat componen [] = {0.0, 0.0, 1.0, 1.0};
 CGColorRef color = CGColorCreate(space, componen);
 CGContextSetStrokeColorWithColor(con, color);
 CGContextMoveToPoint(con, 0, 0);
 CGContextAddLineToPoint(con, 100, 100);
 CGContextStrokePath(con);
 CGColorSpaceRelease(space);
 CGColorRelease(color);

}

当我启动我的应用程序时,这段代码画了一条线,但是当我用我的参数(x1,x2,y1,y2)按下按钮时,我想启动这段代码。我创建了一个这样的函数

- (void)drawLine
{   
    CGContextRef con = UIGraphicsGetCurrentContext();
    CGContextSetLineWidth(con, 5);
    CGColorSpaceRef space = CGColorSpaceCreateDeviceRGB();
    CGFloat componen [] = {0.0, 0.0, 1.0, 1.0};
    CGColorRef color = CGColorCreate(space, componen);
    CGContextSetStrokeColorWithColor(con, color);
    CGContextMoveToPoint(con, x1, y1);
    CGContextAddLineToPoint(con, x2, y2);
    CGContextStrokePath(con);
    CGColorSpaceRelease(space);
    CGColorRelease(color);

}

但是画不出来

这该怎么做?

4

3 回答 3

0

我为 UIView 添加一行非常简单。

UILabel *line = [[UILabel alloc]init];
line.textColor = [UIColor colorWithRed:1 green:1 blue:1 alpha:0.5];
line.frame = CGRectMake(0, 0, 320, 1);
[self.view addSubview:line];

然后你可以按下按钮来控制它的可见属性。

你的问题可以吗?

于 2012-10-12T11:33:31.630 回答
0


- (void)drawRect:(CGRect)rect { }
系统调用的方法。在视图加载之前,它会被系统调用并绘制内容。

因此,如果您在视图加载后更改绘图内容,您必须要求系统调用 drawRect 方法。所以你必须调用相关视图的 setNeedsDisplay 方法。

[myView setNeedsDisplay];

谢谢

于 2012-10-12T11:38:05.557 回答
0

定义你的drawRect:,以便它决定是否应该画一条线:

- (void)drawRect:(CGRect)rect {
    if (self.drawLine) {
        [self drawLineWithContext: UIGraphicsGetCurrentContext()];
        self.drawLine = NO;
    }
}

当点击按钮时,让你的视图控制器设置你的视图参数并告诉系统刷新你的视图:

- (IBAction)doDrawing:(id)sender {
    self.drawView.drawLine = YES;
    self.drawView.x1 = 20.0;
    self.drawView.x2 = 200.0;
    self.drawView.y1 = 10.0;
    self.drawView.y2 = 350.0;
    [self.drawView setNeedsDisplay];
}
于 2012-10-12T11:48:52.373 回答