問題タブ [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.
objective-c - 垂直レイアウトに関して NSLayoutManager と NSTextContainer の動作を明確にしますか?
コードサンプル
NSLayoutManager, NSTextContainer & NSTextStorage
次のように初期化されたカスタムNSView
(TextView ではない)にas プロパティがありawakeFromNib()
ます。
containerSize
レンダリングされるテキストを非表示にする効果があるかどうかを確認するために、の垂直方向NSTextContainer
は意図的に 1 に設定されていますが、そうではありません! ビューでのこのテキストのレンダリングに違いはありません-これが質問の主題です!
drawRect
テキストを描画するために以下の行を含めます。
所見
- 反転した座標系でカスタム ビューを操作するのが最善のようです。他の方法
NSTextView
では、苦痛の世界に陥りそうな気がします。これに関係なく、NSLayoutManager は常に反転した座標系で内部的にテキストの描画を開始します (のようにNSTextView
) 。 - の
containerSize.width
プロパティにNSTextContainer
は次の効果があります。最初のレベルを含むすべてのレベルの行レベルでバインドされます (明らかだとわかっていますが、私に固執してください...) - の
containerSize.height
プロパティにNSTextContainer
はカーブボールがあります。含まれているビューに垂直に表示する余地がない場合でも、最初の行ではバインドされませんが、後続の行ではバインドされます
containerSize.height
*線を一本しか引いていなかったので、この仮説にたどり着くまでに長い時間がかかりました! *
質問
- に関する私の結論は
NSTextContainer
正しいですか? - 垂直方向の視点からテキスト描画を制御する最良の方法は何ですか? テキストの 1 行をビューの下部に配置したいと考えています (デフォルトのように上部に浮かせません)。
cocoa - NSStackView places NSViews on the baseline
Having reviewed most of Apple's (paucity) of documentation regarding NSStackView, plus the wise words of the greater Internet, including the collective wisdom of Stackoverflow, a problem remains.
Any NSView I add programmatically to my (IB instantiated) NSStackView, visually locate themselves to the bottom of their respective gravity area. Hence they overlay each other and don't behave like an expected "stack" of views with appropriate spacing.
Each of the gravity areas seem somehow compressed and unable to accommodate any more views. The more I apply NSStackView.addView to a gravity area the slimmer the existing views become.
I would expect NSStackView to naturally expand to accommodate the .size of the embedded views.
Any wise counsel is most appreciated ...
---more details—</p>
I place the StackView into the main window using interface builder. I can then add other views into areas of the stack in interface builder, such as buttons. These stack and layout as expected in IB and when running.
However, when I add or insert any view programmatically to any gravity area their bottom edge is positioned vertically down to the bottom edge of the StackView. This layout behaviour is the same for a vertical or horizontal stack.
Consequently, if I add more than one view programmatically they are sized OK and display but overlap. I am using 'NSBox' objects as views (for now) and they are sized using '.sizeToFit()'. I can see that their '.bounds.height' and 'width' are non zero.
I'm not sure how to set or log the intrinsic content size. That might be the next thing to try.
—no luck—
So, I have now worked rigorously through all permutations of: compression, hugging, (non-zero) intrinsic sizing, constraints, no constraints and various types of NSViews, but ... if I '.addView(...)' or '.insertView(...)' more than once, in any 'NSStackView' gravity area, the subsequent views overlay the previous ones and position themselves on the particular baseline. This is the edge closest to the floor of my office, regardless of the stack orientation.
Any 'NSStackView' and AutoLayout help, either emotional or technical, is most appreciated.
ios - TextKit を使用した UITextView のアニメーション化された UIImage
UIImage
複数の画像フレームと、アニメーション GIF ファイルから一緒にスライスされたデュレーションを含む があります。画像を a に読み込むと、期待どおりにアニメーション化されますが、代わりにUIWebView
a を使用したいと思います。UITextView
明らかな選択は、TextKit をカスタムNSLayoutManger
および多くのカスタムNSAttributedString
属性とともに使用して、さまざまな描画効果を実現することです。インラインで表示する必要があるすべての画像の s を含む単一のUITextView
ものを提供したいと思います。これらのアニメーション化された の 1 つをロードするときを除いて、正常に動作していますが、フレームを通してアニメーション化されません。これを達成する方法について何か考えはありますか?私は理論的な選択肢を思いつきました:NSAttributedString
NSTextAttachment
UIImages
- アニメーション画像ごとに、カスタム定義の属性を追加します
- レイアウト マネージャーが背景を描画するときは、この属性を繰り返して添付ファイルの位置を特定します。
UIImageView
アニメーション イメージを含む を作成し、サブビューとして追加し、呼び出すためのテキスト ビューへのコールバックstartAnimating
私はまだこれを試していませんが、かなりハッキーです。より良いオプションがあるかどうか疑問に思っています。
要約すると、追加のオブジェクトを必要とせずに、ビアのUIImage
内側をアニメーション化したいと考えています。これが以前に で行われたという事実は無視できます。には、現在構成しているアニメーション フレームを設定するためのプロパティ ( 、 ) があります。に割り当てるとアニメーションが表示され、 に設定するとアニメーションは表示されません。UITextView
NSTextAttachment
NSAttributedString
UIImageView
UIWebView
UIImage
images
duration
UIImageView
NSTextAttachment
フィードバックをいただければ幸いです。ありがとう!
objective-c - AppKit でのテキスト幅測定のパフォーマンス
AppKit で多数の NSString オブジェクト (100 万など) の幅を非常に高速に測定する方法はありますか? 私はこれを行うために3つの異なる方法を試しました:
いくつかのパフォーマンス メトリックを次に示します 。
NSLayoutManager は明らかに進むべき道ですが、問題は
遊んでみたい場合は、こちらが github プロジェクトです。
objective-c - NSlayoutManager を UIView に合わせる
NSLayoutManager (TextKit) を使用して UIView を設定し、UIView を UIScrollView に配置しました。スクロールできるように、UIView のサイズをテキストのサイズに変更するのに問題があります。
現在、テキストは画面いっぱいに表示されていますが、scrollView は実際には画面の残りの部分までスクロールしません。
UIView コード:
}
使用する
数値を取得します(テキストの正しい高さだと思います)。
返された数値を使用して UIView のサイズを変更するにはどうすればよいですか。
私のViewController.mで私は使ってみました
Ps。UIView は IBOutlet として UIViewController にアタッチされ、daveningView と呼ばれますが、UIView のカスタム クラス名は CoreDavening です。DaveningLabel は ScrollView です (私はそれを修正する予定の scrollView の悪い言葉遣いを知っています)
編集 1: ViewController コード:
制約なし。
ios - タップから UILabel の文字のインデックスを取得する
UILabel でタップされた文字のインデックスを取得したいと思います。UILabel をサブクラス化しました。私のawakeFromNib()にはこれがあります:
最初の文字をタップし、touchesEnded で 0 のインデックスを取得するように、ラベルの最初の 5 文字に対して希望どおりに機能しています。
var touchedCharacterIndex = layoutManager.characterIndexForPoint(touch.locationInView(self), inTextContainer: textContainer, fractionOfDistanceBetweenInsertionPoints: nil)
しかし、UILabel の最初の 4 文字を超えてどこかをタップすると、4 または 0 が返されますが、これは正しくありません。
ありがとう、
アップデート
コメントの提案から、私はこれを追加しました:
、 、layoutSubviews()
、、awakFromNib
のセッターでこれを呼び出します。bounds
frame
attributedText
text
そして、テキストの長さが21の場合、最初の文字をタップすると6になるなど、奇妙なインデックスが表示されます.
ios - NSLayoutManager を使用してアニメーション テキスト効果を作成しますか?
WWDC 2013のセッション 220 (テキスト キットによる高度なテキスト レイアウトと効果) では、高度なテキスト アニメーションと組み合わせて使用し、作成することNSLayoutManager
ができると具体的に述べています。彼らは方法を言いません。NSTextStorage
NSTextContainer
NSLayoutManager
/ NSTextStorage
/NSTextContainer
を使用して、カスタム テキスト アニメーションを作成したいと考えています。簡単に言うと、個々のグリフのサイズと位置をアニメーション化し、特定のグリフをフェードおよびフェード解除したいと考えています。
を使用したアニメーション専用の方法やドキュメントはないようです。NSLayoutManager
私が見つけた問題に関する唯一のチュートリアルは hereです。ただし、アニメーションを想定どおりに使用する方法ではNSLayoutManager
なく、アニメーションにハックする方法を示しています (個々のグリフごとに作成されます!)。CATextLayer
誰かが私を正しい方向に向けることができますか? NSLayoutManager
/ NSTextStorage
/NSTextContainer
を使用して静的テキストをレンダリングする方法を知っています。テキストをアニメーション化する原理を示すいくつかのデモはNSLayoutManager
完璧でしょう。始めるためだけに、自分で詳細を把握できます。