在UIView中,重写drawRect: (CGRect) aRect方法,可以自己定义想要画的图案.且此方法一般情况下只会画一次.也就是说这个drawRect方法一般情况下只会被掉用一次.
当某些情况下想要手动重画这个View,只需要掉用[self setNeedsDisplay]方法即可.
drawRect掉用是在Controller->loadView, Controller->viewDidLoad 两方法之后掉用的.所以不用担心在控制器中,这些View的drawRect就开始画了.这样可以在控制器中设置一些值给View(如果这些View draw的时候需要用到某些变量值).
下面是一个drawRect 方法片段的一个示列,画一条线,线的两端各带一个小圆圈
- (void) drawRect: (CGRect) aRect
{
NSLog(@"DRAW RECT...");
// Get the current context
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextClearRect(context, aRect);
// Set up the stroke and fill characteristics
CGContextSetLineWidth(context, 3.0f);
CGFloat gray[4] = {0.5f, 0.5f, 0.5f, 1.0f};
CGContextSetStrokeColor(context, gray);
CGFloat red[4] = {0.75f, 0.25f, 0.25f, 1.0f};
CGContextSetFillColor(context, red);
// Draw a line between the two location points
CGContextMoveToPoint(context, self.loc1.x, self.loc1.y);
CGContextAddLineToPoint(context, self.loc2.x, self.loc2.y);
CGContextStrokePath(context);
CGRect p1box = CGRectMake(self.loc1.x, self.loc1.y, 0.0f, 0.0f);
CGRect p2box = CGRectMake(self.loc2.x, self.loc2.y, 0.0f, 0.0f);
float offset = -8.0f;
// circle point 1
CGMutablePathRef path = CGPathCreateMutable();
CGPathAddEllipseInRect(path, NULL, CGRectInset(p1box, offset, offset));
CGContextAddPath(context, path);
CGContextFillPath(context);
CFRelease(path);
// circle point 2
path = CGPathCreateMutable();
CGPathAddEllipseInRect(path, NULL, CGRectInset(p2box, offset, offset));
CGContextAddPath(context, path);
CGContextFillPath(context);
CFRelease(path);
}