1

我已经使用类似于这个 SO question中所示的方法设置了一个绘图工具......我有一个 UIView 的子类,它跟踪触摸,创建UIBezierPath对象,将路径添加到数组,然后将它们绘制到视图中绘制矩形。该视图是透明的 ([UIColor clearColor], opaque=NO),并放置在以 PDF 和 Word 格式显示文档的 UIWebView 上。

我想使用这个工具来突出显示文本,所以我使用了带有 0.5 alpha 的黄色笔触颜色。这工作得很好,但是颜色使文本在重叠的地方看起来褪色。我正在阅读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,但这没有任何区别。我错过了什么吗?

4

1 回答 1

2

就您的代码而言,您的文本处于完全不同的世界。当您进入drawRect:时,您可以使用的CGContextRef是专门为您的视图和您的视图创建的。它不知道其他视图中的内容,因此您的所有混合都是针对一堆清晰像素进行的。

我会说只是再降低一点alpha,它看起来还可以。或者,您可以在文本后面画出笔触,使文本更加突出(不过这需要一些技巧)。

于 2012-12-04T06:29:26.997 回答