Ios 为什么';UIBezierPath strokeWithBlendMode有什么用吗?
我已经使用类似于中所示的方法设置了一个绘图工具。。。我有一个UIView的子类,它跟踪触摸、创建对象、将路径添加到数组中,然后将它们绘制到drawRect中的视图中。该视图是透明的([UIColor clearColor],不透明=否),并放置在以PDF和Word格式显示文档的UIWebView上 我想使用这个工具来突出显示文本,所以我使用了一个带有.5 alpha的黄色笔划颜色。这样做效果相当好,但颜色会使文本重叠处看起来褪色。我正在阅读混合模式的描述,并认为这将是完美的——它应该允许文本“穿透”高亮颜色以获得更好的对比度 但是,我看不出kCGBlendModeNormal、kCGBlendModeMultiply或我尝试过的任何随机混合模式之间有什么区别。这些真的有效吗,还是只在某些情况下有效 这是我的drawRect代码:Ios 为什么';UIBezierPath strokeWithBlendMode有什么用吗?,ios,drawing,core-graphics,alphablending,Ios,Drawing,Core Graphics,Alphablending,我已经使用类似于中所示的方法设置了一个绘图工具。。。我有一个UIView的子类,它跟踪触摸、创建对象、将路径添加到数组中,然后将它们绘制到drawRect中的视图中。该视图是透明的([UIColor clearColor],不透明=否),并放置在以PDF和Word格式显示文档的UIWebView上 我想使用这个工具来突出显示文本,所以我使用了一个带有.5 alpha的黄色笔划颜色。这样做效果相当好,但颜色会使文本重叠处看起来褪色。我正在阅读混合模式的描述,并认为这将是完美的——它应该允许文本“穿
- (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
。它不知道其他视图中有什么,所以所有的混合都是针对一堆清晰的像素进行的
我想说,只要把阿尔法再降低一点,看起来就可以了。或者,您可以在文本后面绘制笔划,使文本更加突出(不过这需要一些技巧)。为什么要倍增?覆盖看起来更像你想要的。像我尝试过的其他模式一样,kCGBlendModeOverlay没有明显的效果。好吧,它们确实有效,我自己也用过。您确定文本与笔划处于相同的上下文中吗?如果它们是两个不同的视图,那么这将不起作用。不,文本位于我的工程视图下方的UIWebView中。这就是问题所在吗?我打赌是的。您没有关于该层的可用信息。为每个drawRect调用计算每个层的成本太高。因此,您基本上是针对清晰的颜色执行混合模式(这意味着始终相同)。您只能混合上下文中已有的像素数据。感谢您的解释。现在看起来没问题了,如果可能的话,我只是想多吃一点!没问题,在我当前的项目(以及徒手模式)中,我还有一个突出显示web视图的系统,所以我一直在那里。