問題タブ [nslayoutmanager]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
173 参照

ios - NSLayoutManager: setLocation(_:forStartOfGlyphRange:) を呼び出すと、文字列全体でカーニングが無効になりますか?

NSLayoutManager定義された部分文字列のカスタム レイアウトの場所を設定できる単純なサブクラスを作成しました。

これで、次のように任意の文字範囲のカスタム位置を定義できます。

問題なく動作しますが、唯一の問題は、この方法で再配置されたグリフ範囲がカーニングなしでレイアウトおよび描画されることです。次に例を示します。

ここに画像の説明を入力

緑色のボックスには、カーニングなしで描画されたテキストがあり、ピンクのボックスには、比較のためPositionableLayoutManagerにケリングを使用して描画された同じテキストがあります。UILabel

同じことを適切なカーニングで行うにはどうすればよいですか?

0 投票する
1 に答える
405 参照

ios - NSLayoutManager でグリフの数を数える方法

にあるグリフの総数を取得するにはどうすればよいNSLayoutManagerですか?

次のようなカスタム テキスト ビューにオーバーレイするカーソル レイヤーを作成していました。

ただし、それが範囲外でないことを確認したかったglyphIndexのです。このようなもの:

しかし、試行錯誤しても適切な物件を見つけることができず、オンラインで検索してもSOの答えはありませんでした。

最終的にドキュメントに埋もれていることがわかりました (そして今では明らかなようです) が、長い時間がかかったので、ここに Q&A を追加することにしました。

0 投票する
1 に答える
480 参照

ios - UITextView で NSTextContainer/NSLayoutManager を使用すると文字化けする

ページ付きテキストを実装しているので、NSLayoutManager と NSTextContainer を使用して各ページの UITextViews を作成しています。ページングは​​正常に機能していますが、テキストが文字化けしています。バニラ UITextView で同じ NSTextStorage を設定すると、正しく表示されます。

良いテキスト 悪いテキスト

0 投票する
2 に答える
1157 参照

ios - Why do I fail to get textContainer's rect by using "usedRectForTextContainer"

I learned the answer by NAlexN in this Question (Create tap-able "links" in the NSAttributedString of a UILabel?), and write a demo by myself. However, it is unluck for me to work the demo out. Here is my code: (everyone can copy following code to a new project directly to make a test)

The result of running is:

2016-03-11 10:58:04.457 [13451:1007618] textContainer.size={350, 300}

2016-03-11 10:58:07.968 [13451:1007618] Tap received

2016-03-11 10:58:07.969 [13451:1007618] textBoundingBox={{0, 0}, {0, 0}}

From the running result, the layoutManager seem doesn't work. I don't figour out why, maybe I used the layoutManager in a wrong way. Could any body help with this issue. Thank you so Much!

P.S: This demo is designed to create a tap-able url-link in the NSAttributedText of a UILabel.

0 投票する
0 に答える
350 参照

ios - NSLayoutManager で下線を適切に描画する方法

私は現在、UITextView のような独自のワード プロセッサを実装するために、UITextView アーキテクチャの他のクラスと共に NSLayoutManager をサブクラス化しています。現在、グリフの範囲の下に下線を配置しようとするときに問題に直面しています (ハイパーリンクのようなものを実装するため)。下線をレイアウトするために、NSLayoutManager の次のメソッドをオーバーライドしました。

上記の方法では、グリフ範囲を介して、下線の始点から下線の終点までのポイント単位で下線の距離を計算します。次のメソッドを表示します。

ご覧のとおり、startLocation を取得してから、glyphRange 内の各グリフの進行状況を合計して endLocation を取得します。この計算はかなりうまく機能しているように見えますが、一部の文字シーケンスでは線が過剰に描画されたり、描画が不十分になったりするようです。最近、CTFontGetAdvancesForGlyphs がフォントのカーニングを考慮していないことに気付きました。誰でもこのコードで私を助けることができますか? フォントのカーニングを計算に効果的に組み込むにはどうすればよいですか? 指定された場所で NSTextStorage の NSKernAttribute をクエリしようとしましたが、nil 値が返され続けます。attributeAtIndex の取得と、範囲内の属性の列挙の両方を試みました。

NSAttributedString に下線オプションがあることも認識していますが、カスタム定義のスタイル、色などをサポートするなど、さまざまな理由で自分で下線を引きたいと思っています。