CoreGraphics相同的代码绘制不同

时间:2012-02-28 07:03:47

标签: iphone

我在tableviewcell中写了一个msg背景,但滚动时,视图变得不同了。似乎“上下文”存储了一些状态。 代码用箭头绘制圆形矩形。箭头大小应该是固定的,但事实上它有时会改变然后滚动。

 - (void)drawRect:(CGRect)rect
{
    // Drawing code
    CGContextRef context = UIGraphicsGetCurrentContext();

    CGFloat width = self.frame.size.width;
    CGFloat height = self.frame.size.height;


    CGFloat arrowHeight = 10;
    CGFloat arrowWidth = 5;
    CGFloat arrowOffset = 5; 
    CGFloat radius = 5;
    CGFloat shadowHeight = 2;
    CGFloat shadowOffset = 4;

    CGColorRef shadowColor = [UIColor colorWithRed:0.2f
                                             green:0.2f
                                              blue:0.2f
                                             alpha:0.5f].CGColor;

    CGColorRef color;
        color = [UIColor whiteColor].CGColor;

    CGContextSaveGState(context);

        CGContextMoveToPoint(context, width/2, 0);
        CGContextAddArcToPoint(context, width - arrowWidth, 0, width - arrowWidth, height - shadowOffset, radius);
        CGContextAddLineToPoint(context, width - arrowWidth, arrowOffset);
        CGContextAddLineToPoint(context, width, arrowOffset + arrowHeight/2);
        CGContextAddLineToPoint(context, width - arrowWidth, arrowOffset + arrowHeight);
        CGContextAddArcToPoint(context, width - arrowWidth, height - shadowOffset, shadowOffset, height - shadowOffset, radius);
        CGContextAddArcToPoint(context, shadowOffset, height - shadowOffset, shadowOffset, 0, radius);
        CGContextAddArcToPoint(context, shadowOffset, 0, width, 0, radius);

    CGContextSetShadowWithColor(context, CGSizeMake(0, shadowHeight), 3.0, shadowColor);
    CGContextSetFillColorWithColor(context, color);
    CGContextFillPath(context);

    CGContextRestoreGState(context);
}

效果如下: enter image description here

1 个答案:

答案 0 :(得分:1)

我发现了问题。当重复使用单元格时,视图应该重绘,或者视图将使用最后一个单元格中的视图来显示。

所以,只需调用[theView setNeedsDisplay]让视图再次调用drawRect。