【发布时间】:2017-07-08 02:36:44
【问题描述】:
CGContextDrawRadialGradient 在渐变的中心产生一个非常明显的“十字”:
代码(简化):
- (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 上都会发生。同时,同样的渐变在带有 CSS 的 WebKit 中也能完美呈现(所以这不是一些“显示不好”的问题)。
我做错了什么?有没有已知的解决方法?
【问题讨论】:
-
@matt,你的意思是它不可重现,还是在屏幕截图上不够明显?
-
后者可能是颜色不匹配。具有讽刺意味的是,截图在这方面并不是很擅长。
-
空间很好(我都试过了)。不过谢谢。
标签: ios objective-c macos core-graphics