NSTextView 内で NSAttributedString を使用して、テキスト内の特定の領域を強調表示しています。背景色とテキスト色を簡単に変更できることがわかりましたが、角を丸くしたり、背景のグラデーションや境界線などのより洗練されたものをどこから始めればよいかさえわかりません。
ここに私が達成しようとしているものの写真があります:
これは Web ビューで完全に実行できますが、いくつかの余分なグラフィックの繁栄のためにやり過ぎのように思えます.
NSTextView 内で NSAttributedString を使用して、テキスト内の特定の領域を強調表示しています。背景色とテキスト色を簡単に変更できることがわかりましたが、角を丸くしたり、背景のグラデーションや境界線などのより洗練されたものをどこから始めればよいかさえわかりません。
ここに私が達成しようとしているものの写真があります:
これは Web ビューで完全に実行できますが、いくつかの余分なグラフィックの繁栄のためにやり過ぎのように思えます.
作成しようとしているものと非常によく似た外観を実現する NSTextView 実装を作成しました (グラデーションのみが欠落しています)。実装はhttp://github.com/aiman86/ANTaggedTextViewで入手できます。
そして、これが私のアプローチを説明するブログ投稿です。
Quartz lib で角を丸くすることができます:
[view.layer setCornerRadius:7.0];
すべてが可能ですが、スタイルシートほど簡単ではありません!
強調表示するテキストの範囲に属性を設定するには、次の 2 つの方法のいずれかを使用します。
NSTextView *textView = ...;
NSRange rangeToHighlight = ...; // Range of characters in textView's textStorage
NSColor *highlightColor = ...;
// Method 1: less efficient
[textView.textStorage setAttributes:@{ NSForegroundColorAttributeName : highlightColor } range:rangeToHighlight];
// Method 2: more efficient but only works for attributes that don't affect layout, e.g. color, underline etc.
[textView.layoutManager addTemporaryAttribute:NSForegroundColorAttributeName value:highlightColor forCharacterRange:rangeToHighlight];
グラデーションカラーを使用できるかどうかはわかりませんが、単色は確かに機能します。
ただし、これでは角が丸くなりません。
コーナーをカスタム レンダリングできるように、NSTextAttachmentCell を試すことができます。
この問題にはいくつかの回避策があり、角が丸い UIView を作成し、その中に NSTextView を描画してみてください。うまくいくはずです。