Цвет заливки ios CGContextRef - PullRequest
       5

Цвет заливки ios CGContextRef

0 голосов
/ 12 сентября 2018

Я хочу нарисовать дугу и заполнить ее. Первая картина такая, какая она есть. Я хочу получить эффект второй картинки

The current

I want

- (id)initWithFrame:(CGRect)frame {
  if (self = [super initWithFrame:frame]) {
      // 必须清空背景色,不然绘制出来的区域之外有黑色背景
      [self setBackgroundColor:[UIColor clearColor]];
      [self setUserInteractionEnabled:NO];
  }
  return self;
}

- (void)drawRect:(CGRect)rect {
    float x = rect.origin.x;
    float y = rect.origin.y;
    float w = rect.size.width;
    float h = rect.size.height;
    CGContextRef context = UIGraphicsGetCurrentContext();
    UIColor *fullColor = [UIColor whiteColor];
    CGContextSetFillColorWithColor(context, fullColor.CGColor);
    CGContextSetRGBStrokeColor(context,1,1,1,1);
    CGContextMoveToPoint(context,0,h - 22);//圆弧的起始点
    CGContextAddQuadCurveToPoint(context, w / 2, h, w, h - 22);
    CGContextMoveToPoint(context,0,h - 22);//圆弧的起始点
    CGContextAddLineToPoint(context, 0, h);
    CGContextAddLineToPoint(context, w, h);
    CGContextAddLineToPoint(context, w, h - 22);

    CGContextStrokePath(context);
    CGContextDrawPath(context, kCGPathFillStroke);
}

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

CGContextStrokePath() очищает текущий путь.Это также относится к CGContextDrawPath(), CGContextEOFillPath() и CGContextFillPath().

. Поэтому, когда выполняется вызов CGContextDrawPath(context, kCGPathFillStroke);, текущий путь в контексте только что очищен и является пустым путем иничего не нарисовано.

Удаление строки CGContextStrokePath(context); чуть выше должно исправить вашу проблему.

0 голосов
/ 12 сентября 2018
- (void)drawRect:(CGRect)rect {
   float x = rect.origin.x;
   float y = rect.origin.y;
   float w = rect.size.width;
   float h = rect.size.height;
   CGContextRef context = UIGraphicsGetCurrentContext();
   CGContextSetFillColorWithColor(context, [UIColor whiteColor].CGColor);
   CGContextFillRect(context, CGRectMake(0, h - 22, kScreenWidth , 22));
   CGContextSetFillColorWithColor(context, [UIColor clearColor].CGColor);
   // This method
   CGContextSetBlendMode(context, kCGBlendModeClear);
   CGContextMoveToPoint(context,0,h - 22);
   CGContextAddQuadCurveToPoint(context, w / 2, h + 14, w, h - 22);
   CGContextDrawPath(context, kCGPathFill);
   // This method
   CGContextSetBlendMode(context, kCGBlendModeNormal);
  }

Я нашел решение.

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