ios - 为什么 UIBezierPath strokeWithBlendMode 什么都不做?

标签 ios drawing core-graphics alphablending

我已经使用类似于 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/

相关文章:

ios - 如何使用 swift 在 SpriteKit 中创建起始屏幕

javascript - JS中螺旋存储像素的算法是什么?

c# - 在图像上绘制边框

objective-c - 如何保持 CGLayerRef 不变,即使在设备方向切换之后也是如此?

ios - UIBezierPath下绘制渐变

iOS - CoreImage - 为部分图像添加效果

ios - 如何将 "dispatch_get_main_queue()"分配给 Swift 中的常量?

ios - Swift - TableView 加载错误 - 可怕的 SIGBART

ios - 手动格式化

drawing - 对于接受浏览器内的用户绘图,您有什么建议?