[iOS] Texture - 2. Nodeの概念と使い方
ノードとは?
Nodeはビューオブジェクトを囲み、UI内のフレームワークの落下やスレッドの問題を安全かつ柔軟に処理します.
ノードのタイプ
Node
Node
Node Containers
Nodeの使い方
画面の中央に簡単な情報を置く
MessageNode.swiftclass MessageNode: ASDisplayNode {
lazy var textNode = { () -> ASTextNode in
let node = ASTextNode()
node.attributedText = NSAttributedString(
string: "Hello iOS",
attributes:
[NSAttributedString.Key.font: UIFont.boldSystemFont(ofSize: 20)]
)
return node
}()
override init() { // Background
super.init()
self.automaticallyManagesSubnodes = true
self.backgroundColor = .systemBackground
}
override func didLoad() { // Main
super.didLoad()
}
override func layoutSpecThatFits(_ constrainedSize: ASSizeRange) -> ASLayoutSpec { // Background
return ASStackLayoutSpec(
direction: .vertical,
spacing: 0,
justifyContent: .center,
alignItems: .center,
children: [textNode]
)
}
override func layout() { // Main
super.layout()
}
}
「Hello iOS」メッセージを表示するノードを作成します.
layoutSpecThatFitsメソッドを使用して、レイアウトの方向、間隔、レイアウト、位置合わせなどのレイアウトの組織を作成します.
ViewController.swiftimport AsyncDisplayKit
class ViewController: ASDKViewController<MessageNode> {
override init() {
super.init(node: MessageNode())
self.node.automaticallyManagesSubnodes = true
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
メッセージノードをViewControllerに表示します.
Subnodesの自動管理が有効になっている場合、サブノードの追加または削除は、レイアウト構築中に自動的に処理されます.
ノードのライフサイクル
Initメソッド
UIdiewはプライマリ・スレッドで動作し、ノードはバックグラウンド・スレッドで動作します.
▲ヴェルナ.プライマリ・スレッドからアクセスできるプロパティ(layerなど)はdidLoadメソッドでアクセスする必要があります.
didLoadメソッド
Initメソッドが完了してノードオブジェクトになったときに呼び出され、これらのプロパティはプライマリ・スレッドで動作してプライマリ・スレッドにアクセスできます.
layoutSpecThatFitsメソッド
Yoga Layout Flex Boxに基づいて、バックグラウンドスレッドでレイアウトを設計し、構築します.
プライマリ・スレッドで使用可能な要素は使用できません.
レイアウト方法
layoutSpecThatFitsメソッドでレイアウトを構築すると、メインスレッドでレイアウトを変更するたびにレイアウトが呼び出されます.Releautの変更に従って更新する必要がある他の要素を処理します.
Reference
この問題について([iOS] Texture - 2. Nodeの概念と使い方), 我々は、より多くの情報をここで見つけました
https://velog.io/@jini0318/iOS-Texture-2.-Node의-개념과-사용법
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
class MessageNode: ASDisplayNode {
lazy var textNode = { () -> ASTextNode in
let node = ASTextNode()
node.attributedText = NSAttributedString(
string: "Hello iOS",
attributes:
[NSAttributedString.Key.font: UIFont.boldSystemFont(ofSize: 20)]
)
return node
}()
override init() { // Background
super.init()
self.automaticallyManagesSubnodes = true
self.backgroundColor = .systemBackground
}
override func didLoad() { // Main
super.didLoad()
}
override func layoutSpecThatFits(_ constrainedSize: ASSizeRange) -> ASLayoutSpec { // Background
return ASStackLayoutSpec(
direction: .vertical,
spacing: 0,
justifyContent: .center,
alignItems: .center,
children: [textNode]
)
}
override func layout() { // Main
super.layout()
}
}
import AsyncDisplayKit
class ViewController: ASDKViewController<MessageNode> {
override init() {
super.init(node: MessageNode())
self.node.automaticallyManagesSubnodes = true
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
Initメソッド
UIdiewはプライマリ・スレッドで動作し、ノードはバックグラウンド・スレッドで動作します.
▲ヴェルナ.プライマリ・スレッドからアクセスできるプロパティ(layerなど)はdidLoadメソッドでアクセスする必要があります.
didLoadメソッド
Initメソッドが完了してノードオブジェクトになったときに呼び出され、これらのプロパティはプライマリ・スレッドで動作してプライマリ・スレッドにアクセスできます.
layoutSpecThatFitsメソッド
Yoga Layout Flex Boxに基づいて、バックグラウンドスレッドでレイアウトを設計し、構築します.
プライマリ・スレッドで使用可能な要素は使用できません.
レイアウト方法
layoutSpecThatFitsメソッドでレイアウトを構築すると、メインスレッドでレイアウトを変更するたびにレイアウトが呼び出されます.Releautの変更に従って更新する必要がある他の要素を処理します.
Reference
この問題について([iOS] Texture - 2. Nodeの概念と使い方), 我々は、より多くの情報をここで見つけました https://velog.io/@jini0318/iOS-Texture-2.-Node의-개념과-사용법テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol