1

このSOの質問に示されているものと同様のアプローチを使用して描画ツールをセットアップしました...タッチを追跡し、 UIBezierPathオブジェクトを作成し、パスを配列に追加し、それらをビューに描画するUIViewのサブクラスがありますdrawRect. ビューは透明 ([UIColor clearColor]、不透明 = NO) であり、PDF および Word 形式でドキュメントを表示する UIWebView の上に配置されます。

このツールを使用してテキストを強調表示したいので、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
    }
}

色のアルファを 1.0 にして、 strokeWithBlendMode メソッドのアルファ引数を 0.5 に設定してみましたが、違いはありません。何か不足していますか?

4

1 に答える 1

2

コードに関する限り、テキストはまったく別の世界にあります。に入るdrawRect:と、あなたが利用できるのは、CGContextRefあなたのビューとあなたのビューだけのために特別に作成された です。他のビューに何があるかはわかりません。そのため、すべてのブレンディングは一連のクリア ピクセルに対して行われます。

アルファをもう少し下げれば、問題ないように見えます。または、テキストの後ろにストロークを描いて、テキストをもう少し目立たせることもできます (ただし、これには少しコツが必要です)。

于 2012-12-04T06:29:26.997 に答える