我已经使用类似于 this SO question 中所示的方法设置了一个绘图工具。 ...我有一个 UIView 的子类,它跟踪触摸,创建 UIBezierPath对象,将路径添加到数组,然后将它们绘制到 drawRect 中的 View 上。 View 是透明的 ([UIColor clearColor], opaque=NO) 并放置在以 PDF 和 Word 格式显示文档的 UIWebView 上。
我想使用此工具来突出显示文本,因此我使用了 alpha 为 0.5 的黄色描边颜色。这工作得很好,但颜色使文本在重叠的地方看起来褪色了。我正在阅读 kCGBlendModeMultiply 的描述混合模式和完美的想法——它应该允许文本“穿透”高亮颜色以获得更好的对比度。
但是,我看不出 kCGBlendModeNormal、kCGBlendModeMultiply 或我尝试过的任何随机混合模式之间有任何区别。这些真的有用吗,还是只在某些情况下有用?
这是我的 drawRect 代码:
- (void)drawRect:(CGRect)rect {
for (UIBezierPath *path in self.paths) {
[[UIColor colorWithRed:1 green:1 blue:0 alpha:0.5] setStroke]; // yellow
//[path stroke]; // uses default blend mode
[path strokeWithBlendMode:kCGBlendModeMultiply alpha:1.0]; // looks the same as above
}
}
我尝试将颜色的 alpha 设置为 1.0,并将 strokeWithBlendMode 方法的 alpha 参数设置为 0.5,但这没有任何区别。我错过了什么吗?
最佳答案
就您的代码而言,您的文本处于一个完全不同的世界。当您输入 drawRect:
时,您可以使用的是一个 CGContextRef
,它是专门为您的 View 创建的,而且仅是您的 View 。它不知道其他 View 中有什么,因此您所有的混合都是针对一堆清晰像素进行的。
我会说再降低一点 alpha,它看起来就不错了。或者,您可以在文本后面绘制笔划以使文本更加突出(不过这需要一些技巧)。
关于ios - 为什么 UIBezierPath strokeWithBlendMode 什么都不做?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13696819/