iOS CGContext 边缘未抗锯齿

iOS CGContext Edge isn't antialiased

我正在尝试绘制一个 15 度角的矩形,将两种颜色沿中心分开,但它们之间的线是像素化的。我尝试了不同的混合选项,但似乎无法弄清楚如何使它看起来干净。

This is what the header looks like now

有谁知道我怎样才能使它们之间的界限看起来干净?

if (!_backgroundImageView.image) {
  CGFloat width = CGRectGetWidth(self.bounds);
  CGFloat height = CGRectGetHeight(self.bounds);
  CGFloat tWidth = 0.26794919243f/*tan(15 degrees)*/ * height;

  UIGraphicsBeginImageContext(CGSizeMake(width, height));
  CGContextRef context = UIGraphicsGetCurrentContext();

  if (_color1) {
    CGContextSetFillColorWithColor(context, _color1.CGColor);
    CGContextMoveToPoint(context, 0, 0);
    CGContextAddLineToPoint(context, 1.0f + RoundPixelValue((width + tWidth) / 2.0f), 0);
    CGContextAddLineToPoint(context, 1.0f + RoundPixelValue((width - tWidth) / 2.0f), height);
    CGContextAddLineToPoint(context, 0, height);
    CGContextFillPath(context);
  }

  if (_color2) {
    CGContextSetFillColorWithColor(context, _color2.CGColor);
    CGContextMoveToPoint(context, width, 0);
    CGContextAddLineToPoint(context, RoundPixelValue((width + tWidth) / 2.0f) - 1.0f, 0);
    CGContextAddLineToPoint(context, RoundPixelValue((width - tWidth) / 2.0f) - 1.0f, height);
    CGContextAddLineToPoint(context, width, height);
    CGContextFillPath(context);
  }

  _backgroundImageView.image = UIGraphicsGetImageFromCurrentImageContext();
  UIGraphicsEndImageContext();
}

这里的主要问题是您没有使用正确的比例创建上下文。

而不是使用 UIGraphicsBeginImageContext 使用 UIGraphicsBeginImageContextWithOptions 像这样:

UIGraphicsBeginImageContextWithOptions(CGSizeMake(width, height), YES, 0);

将比例指定为 0 会将其设置为设备屏幕的比例因子。

这应该消除了大部分锯齿现象。