Post

Telegram研究:聊天列表Bubble里的每个类型的细分

ChatMessageBubbleItemNode: ChatMessageItem: ListViewItemNode

UI层级结
ChatMessageBubbleItemNode
– ChatBubbleMainContainerNode
— ContextExtractedContentContainingNode
—- ContextExtractedContentView UIView
—- ChatMessageBubbleClippingNode
—– MessageBubbleContentNode

根据item变成BubbleContentNode 数据: ChatMessageItemImpl ChatMessageBubbbleItemNode.swift ChatMessageBubbleItemNode -> asyncLayout -> beginLayout -> contentNodeMessagesAndClassesForItem -> ChatMessageItem > ... AnyClass ... -> for contentNodeItemValue in contentNodeMessagesAndClasses -> AnyClass -> contentNodeItem.type == xxx.self -> let contentNode = (contentNodeItem.type as! ChatMessageBubbleContentNode.Type).init()

赋值 ChatMessageItemImpl.nodeConfiguredParams -> ChatMessageBubbleItemNode.asyncLayout -> ChatMessageBubbleItemNode.beginLayout -> ChatMessageTextBubbleContentNode.asynclayoutContent -> item.message.text

基类: MessageBubbleContentNode (系统消息也用是个)
文本: ChatMessageTextBubbleContentNode (单独的文本或图文里的文本)
图片: ChatMessageMediaBubbleContentNode (单独的图片、gif或混合多图文的图)
。。。。

时间和状态:MessageDateAndStatusNode

动画(ChatMessageAnimatedStickerItemNode)
基类:ManagedAnimationNode
骰子:ManagedDiceAnimationNode
老虎机slot: SlotMachineAnimationNode
一般sticker:DefaultAnimatedStickerNodeImpl

This post is licensed under CC BY 4.0 by the author.