径向CGGradient中的严酷色带

时间:2017-02-18 15:27:02

标签: ios objective-c macos core-graphics

CGContextDrawRadialGradient在渐变的中心产生一个非常明显的“十字”:

A visible radial cross at the gradient centre

代码(缩减):

- (void)drawRect:(NSRect)dirtyRect {
    CGContextRef context = [[NSGraphicsContext currentContext] graphicsPort];

    size_t numberOfGradientLocations = 2;
    CGFloat startRadius = 0.0f;
    CGFloat endRadius = 30.0f;
    CGPoint centre = CGPointMake(floorf(self.bounds.size.width / 2), floorf(self.bounds.size.height / 2));
    CGFloat gradientColours[8] = {0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f};
    CGFloat gradientLocations[2] = {0.0f, 1.0f};

    CGColorSpaceRef colourspace = CGColorSpaceCreateDeviceRGB();
    CGGradientRef gradient = CGGradientCreateWithColorComponents(colourspace, gradientColours, gradientLocations, numberOfGradientLocations);
    CGContextDrawRadialGradient(context, gradient, centre, startRadius, centre, endRadius, kCGGradientDrawsBeforeStartLocation);
}

这在macOS和iOS上都会发生。同时,同样的渐变在WebKit中使用CSS完美呈现(因此它不是一些'糟糕的显示'问题)。

我做错了什么?有没有一种已知的方法呢?

1 个答案:

答案 0 :(得分:0)

这是我在iOS上获得的;我使用了100%的iPhone 7 Plus模拟器,以使每个像素都可见,并且看起来完全平滑:

enter image description here

编辑经过一些实验,我怀疑你会看到点和像素之间不对齐造成的莫尔效应。