Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 为什么';UIBezierPath strokeWithBlendMode有什么用吗?_Ios_Drawing_Core Graphics_Alphablending - Fatal编程技术网

Ios 为什么';UIBezierPath strokeWithBlendMode有什么用吗?

Ios 为什么';UIBezierPath strokeWithBlendMode有什么用吗?,ios,drawing,core-graphics,alphablending,Ios,Drawing,Core Graphics,Alphablending,我已经使用类似于中所示的方法设置了一个绘图工具。。。我有一个UIView的子类,它跟踪触摸、创建对象、将路径添加到数组中,然后将它们绘制到drawRect中的视图中。该视图是透明的([UIColor clearColor],不透明=否),并放置在以PDF和Word格式显示文档的UIWebView上 我想使用这个工具来突出显示文本,所以我使用了一个带有.5 alpha的黄色笔划颜色。这样做效果相当好,但颜色会使文本重叠处看起来褪色。我正在阅读混合模式的描述,并认为这将是完美的——它应该允许文本“穿

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

我想使用这个工具来突出显示文本,所以我使用了一个带有.5 alpha的黄色笔划颜色。这样做效果相当好,但颜色会使文本重叠处看起来褪色。我正在阅读混合模式的描述,并认为这将是完美的——它应该允许文本“穿透”高亮颜色以获得更好的对比度

但是,我看不出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
。它不知道其他视图中有什么,所以所有的混合都是针对一堆清晰的像素进行的


我想说,只要把阿尔法再降低一点,看起来就可以了。或者,您可以在文本后面绘制笔划,使文本更加突出(不过这需要一些技巧)。

为什么要倍增?覆盖看起来更像你想要的。像我尝试过的其他模式一样,kCGBlendModeOverlay没有明显的效果。好吧,它们确实有效,我自己也用过。您确定文本与笔划处于相同的上下文中吗?如果它们是两个不同的视图,那么这将不起作用。不,文本位于我的工程视图下方的UIWebView中。这就是问题所在吗?我打赌是的。您没有关于该层的可用信息。为每个drawRect调用计算每个层的成本太高。因此,您基本上是针对清晰的颜色执行混合模式(这意味着始终相同)。您只能混合上下文中已有的像素数据。感谢您的解释。现在看起来没问题了,如果可能的话,我只是想多吃一点!没问题,在我当前的项目(以及徒手模式)中,我还有一个突出显示web视图的系统,所以我一直在那里。