创建自定义UI后调用drawRect?

时间:2012-01-23 17:24:14

标签: iphone objective-c ios

我需要画两条线。我可以使用相同的UIView子类来进行两次绘制吗?在我创建UIView之后

draw2D *myView = [[draw2D alloc] initWithFrame:myRect];

如果我更改方法以使用变量,我可以更改这些值并调用drawRect方法来绘制不同的行吗?

- (void)drawRect:(CGRect)rect
{
    CGContextRef context01 = UIGraphicsGetCurrentContext();

    CGContextSetLineWidth(context01, 1.0);
    CGContextSetStrokeColorWithColor(context01, [[UIColor blackColor]CGColor]);
    CGContextMoveToPoint(context01, 0, 0);
    CGContextAddLineToPoint(context01, 800, 0);
    CGContextStrokePath(context01);

    CGContextRef context02 = UIGraphicsGetCurrentContext();

    CGContextSetLineWidth(context02, 1.0);
    CGContextSetStrokeColorWithColor(context02, [[UIColor blackColor]CGColor]);
    CGContextMoveToPoint(context02, 453, 0);
    CGContextAddLineToPoint(context02, 453, 800);
    CGContextStrokePath(context02);
}

2 个答案:

答案 0 :(得分:1)

只需在视图上调用setNeedsDisplay即可强制再次调用其drawRect方法。

它不会立即重绘视图,但会将其标记为需要在下一个视图更新周期中再次绘制(更新大约每隔60秒发生一次)。这意味着您可以多次调用setNeedsDisplay而不会降低性能。

答案 1 :(得分:0)

  

我可以使用相同的UIView子类进行两次绘制吗?

确定

  

如果我更改方法以使用变量,我可以更改这些值并调用drawRect方法来绘制不同的行吗?

通常,您只需创建一个包含这些变量参数的新函数或方法:

static inline void imp_DrawLine(CGContextRef gtx, CGPoint start, CGPoint end) {
    CGContextMoveToPoint(gtx, start.x, start.y);
    CGContextAddLineToPoint(gtx, end.x, end.y);
    CGContextStrokePath(gtx);
}

- (void)drawRect:(CGRect)rect
{
    CGContextRef gtx = UIGraphicsGetCurrentContext();

    CGContextSetLineWidth(gtx, 1.0);
    CGContextSetStrokeColorWithColor(gtx, [UIColor blackColor].CGColor);

    imp_DrawLine(gtx, CGPointMake(0, 0), CGPointMake(800, 0));
    imp_DrawLine(gtx, CGPointMake(453, 0), CGPointMake(453, 800));
}