为什么UIBezierPath strokeWithBlendMode不做任何事情?

时间:2012-12-04 05:42:39

标签: ios drawing core-graphics alphablending

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

我想使用此工具突出显示文字,因此我使用的是带有.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,但它没有任何区别。我错过了什么吗?

1 个答案:

答案 0 :(得分:2)

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

我说只要稍微降低alpha值,它就会好看。或者,您可以在文本后面画出以使文本更突出(尽管这会花费一些技巧)。