CoreGraphics один и тот же код рисовать разные - PullRequest
2 голосов
/ 28 февраля 2012

Я пишу фон сообщения в tableviewcell, но при прокрутке вид становится другим. Вроде как «контекст» хранит некое состояние. Код рисует круглый прямоугольник со стрелкой. Размер стрелки должен быть фиксированным, но на самом деле он иногда будет меняться при прокрутке.

 - (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 Ответ

1 голос
/ 29 февраля 2012

Я нахожу проблему.представление должно перерисовываться при повторном использовании ячейки, иначе представление будет использовать представление последней ячейки для отображения.

, поэтому просто вызовите [theView setNeedsDisplay], чтобы позволить представлению снова вызвать drawRect.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...