問題タブ [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.
ios - 大きな NSAttributedString を持つ UItextView のスクロール パフォーマンスの問題
私はアプリのテキストエディタに取り組んでいます。私はUITextViewを使用しています
テキスト ビューを読み込むサンプル コードを参照してください。
テキストのサイズは約 400k ワードです。
私は次の問題に直面しています。
下にスクロールするとテキストのスクロールが遅くなり、メモリの問題によりアプリがクラッシュすることがあります。テキストビューを下にスクロールすると、iOSはレンダリングされたテキスト画像をメモリに保存していると思いますが、上にスクロールするとメモリが解放されます。
[すべて選択] をタップすると、テキストの選択に時間がかかりすぎて、テキストの選択後にスクロールが遅くなり、メモリが増加するためにメモリの問題でアプリがクラッシュすることがあります。iOSはメモリ内に完全なテキストの画像(ユーザーに見えるかのように)を生成し、完全なテキストを選択して、選択が完了するまでその画像を保持すると思います。選択が終了すると、アプリのドロップによってメモリが保持されます。
大きなテキストを表示するもう 1 つの方法は、複数のテキストビューを使用して、テキストを UITableView のように表示可能なテキストビューにのみ割り当てることですが、UItextView の layoutManager の textChanged デリゲート呼び出しごとに必要なテキストビューの数を再計算する必要があるため、複雑さが増します。 .
UITextView で大きな属性付きテキストをより良いパフォーマンスで表示する方法は、誰にでもあります。
領域が可視範囲内にあるときにテキストを表示するため、iPages アプリがどのように機能しているかを推測します。
ios7 - 余分なグリフを挿入するには?
UITextView で 2 つの表示モードを切り替えたい。モード 1 では略語を表示し、モード 2 では完全な単語を表示する必要があります。たとえば、「Abbr」です。対「略語」。
これを行う最良の方法は何ですか?一部の単語には同じ略語が含まれている可能性があり、ユーザーは完全な単語または略語のいずれかを自由に入力できることを覚えていますか?
これまでのところ、NSLayoutManager をサブクラス化しようとしました。省略された文字列を取得し、完全な単語を描画する必要があると仮定すると、次のメソッドを実装します。
}
ただし、このメソッドは、4 つの追加のグリフを挿入しようとすると、無効なグリフ インデックス「_NSGlyphTreeInsertGlyphs 無効な文字インデックス」について不平を言います。
list - NSTextLayout でグリフを非表示にする
カスタム NSTextLayout を持つ UITextView があります。
VPLayoutManager.h
VPLayoutManager.m
このコードはグリフを非表示にしますが、UITextView にはまだグリフが表示されます (カーソルは、現在非表示になっていても、その位置にグリフがあることをまだ「示しています」) ... 問題は次のとおりです。グリフを完全に非表示にするにはどうすればよいですか?
段落の先頭にある文字に基づいてリストを作成しようとしています。アイデアは、段落がリストの一部であるかどうかを識別する Unicode を追加し、NSTextLayout 内でこの Unicode を非表示にして、"リストを描く。
ios - UITextView と NSLayoutManager から行情報を取得する
プロトコルをサポートするにはUIAccessibilityReadingContent
、その行に関する質問に答える UITextView が必要です。これらは、実装する必要があるプロトコルのメソッドです。
accessibilityLineNumberForPoint:
<- 座標を指定して行番号を返すaccessibilityContentForLineNumber:
<- 指定された行のテキストを返しますaccessibilityFrameForLineNumber:
<- 行番号を指定して、そのフレームを返しますaccessibilityPageContent
<- テキスト コンテンツ全体。私が持っていること。:)
私は NSLayoutManager が私を助けることができると考えていますが、私はそれを経験していません。私はそれのいくつかを理解しました(私は思う)が、まだ助けが必要です。
Apple には、テキスト ビューの行数を取得できるサンプル コード ( here ) があります。
lineRange
上記で、このメソッドを使用して直線四角形を計算できると思いますNSLayoutManager
:
そして、次lineRanges
を使用してポイントの行番号を計算できるはずです(lineRange
グリフインデックスを含む を見つけることにより:
では、行番号を指定して行の内容を ( として) 取得するにはどうすればよいNSString
でしょうか?
ios7 - iOS 7 UITextView: アプリケーションを再度開いた後、nstextattachment のサイズが 2 倍になる
iOS7 でテキスト キットを使用してノート エディターを構築しています。以前、カスタム サイズの NSTextAttachment のレンダリングで問題が発生しました。レンダリングが大幅に遅くなったためです。画像をスケーリングしてからテキストビューに追加することで問題を解決しまし た。それに画像を追加する 画像をスケーリングした後、テキストビューのレンダリングは遅延なく正常に実行されます。テキストビューの属性付きテキストはコアデータに保存されます。アプリケーションの実行中のセッション中、テキストビューは画像を正しく表示します。属性付きテキストをコアデータに保存して取得した後でももう一度テキストビューに表示すると、画像はきれいに見えますが、アプリを強制終了して再度アプリケーションを実行すると、画像は2倍のサイズに拡大されます。画質。
画像を 1.0 にスケーリングすると、画像は拡大されませんが、画質は非常に悪くなります。
問題はどこにあると思いますか? 問題はレイアウトマネージャーにあります。
私が試し
たこと NSLayoutManager をサブクラス化し、
- (void)drawGlyphsForGlyphRange:(NSRange)glyphsToShow atPoint:(CGPoint)originをオーバーライド
しようとしました。アプリケーションの新しいセッションを実行すると、添付ファイルのサイズが倍増します。添付ファイルのサイズを確認してサイズを変更すると、再びラグが発生し始めます。私はかなりの時間からこの問題に悩まされています。どんな提案でも大歓迎です。
ios - バックグラウンドスレッドでNSLayoutManagerを安全に使用できますか?
iOSのドキュメントには次のように書かれていますが:
NLayoutManager、NSTextStorage、および NSTextContainer は、アプリが単一のスレッドからのアクセスを保証している限り、サブスレッドからアクセスできます。
私は時々この例外に遭遇しました:
キャッチされていない例外 'NSInternalInconsistencyException' が原因でアプリを終了しています。理由: 'メイン スレッドでのみ実行してください!'
バックトレースは次のとおりです。
注意すべきことの 1 つは、 myNLayoutManager
がUITextView
. UITextView
バックグラウンド スレッドでテキスト レイアウトを行うために使用される通常の方法と考えることができます。
つまり、ドキュメントの内容に反してNLayoutManager
、単一のバックグラウンド スレッドにアタッチされている場合、安全に使用できないということUITextView
ですか?
ios7 - iOS7 Line Spacing を使用して UITextView に入力し、TextKit を使用してフォーマットを維持する
iOS7でUITextView内に入力するときに行間隔/段落間隔を達成する方法を理解するのに役立つこの素晴らしい例に出くわしましたが、問題があり、まだ学習しているので、誰かが問題を解決するのを手伝ってくれることを願っていますTextKitについてお願いします。
これは実際の例です https://github.com/downie/DoubleSpacedTextView
2 つのファイルを添付しました:-
1- これは問題のビデオです:- http://1drv.ms/1o8Rpd2
2- これは私がテストしているプロジェクトです: http://1drv.ms/1o8RtK0
問題は、テキスト行の間に空白行 (少なくとも 2 行の空白行) があり、空白行の内側をクリックして UITextView をアクティブにし、キーボードを表示すると、テキストが上に移動するか、書式設定が失われることです。
これは私がオリジナルから少し変更したコア関数であり、書式設定を行います。完全に機能しますが、UITextView 内を初めてクリックしたときは機能しません:-
これを止めることができるかどうか見ていただけますか?UITextView に入力するときにテキストが常にフォーマットされるようにします。
TextKit または属性付きテキストを使用して、書式設定されたテキスト (行間隔付き) を UITextView に入力する方法を示す他の例はありますか?
iOS6以降、この問題に苦労しています。
ありがとう、
意思
ios7 - iOS7 glyphRangeForTextContainer - UITextView 内のすべてのグリフ/すべてのテキスト範囲を選択する
UITextView に入力するときに行間を実現しようとしています。UITextView内をクリックすると、カーソル位置までのすべての文字に対してのみ行間をレンダリングするように見えるこの関数があります。
UITextView内をクリックしたときに、書式設定がすべてのテキスト範囲に適用されるようにする関数をどのように記述すればよいですか。
おそらくglyphRangeForTextContainerがこれを支援するための同等の方法はありますか?
問題はこのスレッドに関連しています
iOS7 Line Spacing を使用して UITextView に入力し、TextKit を使用してフォーマットを維持する
1- これは問題のビデオです:- http://1drv.ms/1o8Rpd2
2- これは私がテストしているプロジェクトです: http://1drv.ms/1o8RtK0
ありがとうございました。