移动开发UI组件【免费下载链接】TextureSmooth asynchronous user interfaces for iOS apps.项目地址https://gitcode.com/gh_mirrors/te/Texture点击查看免费下载本文以 Texture 仓库官方 API Diff 文档docs/apidiff/ASDK_API_Diff_1.9.92_to_2.0.html为骨架结合 2.0 升级指南 与源码实现系统梳理从 AsyncDisplayKit 1.9.92 升级到 2.0-beta.1 时全部公开 API 的增删改明细。读完本文你将掌握三大核心迁移任务布局系统从ASLayoutable到ASLayoutElement的重命名、容器 API 从collectionView/tableView到collectionNode/tableNode的空间迁移以及接口状态回调方法的统一命名并能对照官方 diff 逐条排查自己项目的编译警告与行为变化。一、版本背景与文档定位docs/_docs/apidiff-1992-to-20beta1.md是 Texture 2.0 时代新增的 API Diff 页面入口它通过 iframe 内嵌了完整的差异清单 ASDK_API_Diff_1.9.92_to_2.0.html。这份清单由自动化工具从1.9.92与2.0-beta.1两套头文件对比生成按头文件分组逐条标记每个符号的Added新增、Removed移除、Modified修改含 From/To 对比与弃用说明。该文档与其姊妹篇 adoption-guide-2-0-beta1.mdUpgrading to 2.0配套使用前者回答改了什么后者回答怎么升级。而 layout2-conversion-guide.md 则专门覆盖布局 API 的代码级转换示例。二、获取与测试 2.0先跑通再迁移升级指南给出了明确的测试路径2.0 版本为所有旧 API 提供了兼容桥接升级后只会看到大量弃用警告而非编译错误可以放心地在旧 API 下先验证功能再逐步迁移。通过 CocoaPods 获取 2.0pod Texture, 2.0然后在终端执行pod repo update pod update Texture如果项目启用了 Warnings as Errors警告会直接导致编译失败可三选一处理在 Xcode 工程设置中关闭弃用警告在 Build Settings 中关闭 warnings-as-errors关闭 Texture 自身的弃用警告将Source/Base/ASBaseDefines.h中的ASDISPLAYNODE_WARN_DEPRECATED宏改为0。升级后需重点留意一个行为变化ASStackLayoutSpec.alignItems默认值由ASStackLayoutAlignItemsStart变为ASStackLayoutAlignItemsStretch可能导致 UI 出现拉伸变形。该默认值在源码 ASStackLayoutSpec.h 中对应注释Defaults to ASStackLayoutAlignItemsStretch而枚举完整取值Start/End/Center/Stretch/BaselineFirst/BaselineLast/NotSet定义在 ASStackLayoutDefines.h。三、API Diff 全景按头文件的三类变更官方 diff 共覆盖数十个头文件、约 500 条符号级差异可用工具自动分为三类。本文按主题归并为四大板块布局系统重构、容器 API 迁移、接口状态回调统一、周边工具与基础设施更新。3.1 变更速览表主题变更类型典型符号迁移方向布局协议Removed → AddedASLayoutable→ASLayoutElement协议整体重命名布局子协议Removed → AddedASStackLayoutable→ASStackLayoutElementASStaticLayoutable→ASAbsoluteLayoutElement按新协议适配尺寸类型Removed → AddedASRelativeDimension/ASRelativeSize→ASDimension/ASLayoutSize改用新结构体与工厂函数布局 SpecModifiedASStaticLayoutSpec→ASAbsoluteLayoutSpec换用新类与sizing模式容器ModifiedASCollectionView/ASTableView大量方法 Deprecated改用ASCollectionNode/ASTableNode回调ModifiedloadStateDidChange:等 →didEnterPreloadState等换用成对的新方法图片协议RemovedASImageDownloaderProtocolDeprecated等仅保留ASImageDownloaderProtocol其他AddedASWeakSet、ASDeallocQueue、NSArrayDiffing、ASButtonNode.imageAlignment直接使用新 API四、布局系统重构ASLayoutable 全面更名为 ASLayoutElement这是 1.9.92 → 2.0-beta.1 中规模最大、影响最广的一组变更核心是把可布局对象概念统一为布局元素并把原本散落在各协议上的布局属性收拢到ASLayoutElementStyle中。4.1 协议层重命名diff 中ASLayoutable.h整份头文件被移除ASLayoutable、ASLayoutableType及所有布局属性spacingBefore/spacingAfter/flexGrow/flexShrink/flexBasis/alignSelf/ascender/descender/sizeRange/layoutPosition全部删除取而代之的是新增的ASLayoutElement.h新增了ASLayoutElement协议layoutElementType、canLayoutAsynchronous、style、debugName以及核心方法-layoutThatFits:、-layoutThatFits:parentSize:、-calculateLayoutThatFits:ASLayoutElementStyle类width/height/minWidth/maxWidth/minHeight/maxHeight、preferredSize/minSize/maxSize、preferredLayoutSize/minLayoutSize/maxLayoutSize外加ASLayoutElementStyleDelegate与-styledWithBlock:ASLayoutElementStylability分类提供内部私有协议ASLayoutElementPrivate、上下文工具ASLayoutElementContextMake/SetCurrentContext/GetCurrentContext与转发宏ASLayoutElementStyleForwarding。在源码中ASDisplayNode与ASLayoutSpec都已从遵循ASLayoutable改为遵循ASLayoutElement见 diff 对ASDisplayNode.h、ASLayoutSpec.h的 Protocols From/To 记录新协议定义可查看 ASLayoutElement.h。旧的ASLayoutableExtensibility、ASLayoutablePrivate、ASEnvironment布局相关部分同样被ASLayoutElementExtensibility、ASLayoutElementPrivate取代如ASEnvironmentLayoutExtensibilityForwarding宏的 Header 从ASLayoutablePrivate.h移到ASLayoutElementPrivate.h。4.2 尺寸模型ASDimension 取代 ASRelativeDimensiondiff 中ASDimension.h记录了完整的移除→新增清单移除ASRelativeDimension、ASRelativeDimensionTypePercent、ASRelativeDimensionMakeWithPoints/Percent、ASRelativeSize、ASRelativeSizeMakeWithPercent、ASRelativeSizeResolveSize等新增ASDimensionUnit含Auto/Points/Fraction三值、ASDimension、ASLayoutSize、ASLayoutElementSize以及工厂与比较函数ASDimensionMake:ASDimensionMakeWithPoints:ASDimensionMakeWithFraction:、ASDimensionEqualToDimension:、ASDimensionResolve:、ASLayoutElementSizeMake/Resolve、NSStringFromASDimension等便捷桥接NSNumber (ASDimension)分类新增as_pointDimension与as_fractionDimension可直接把(10)、(0.5)转成尺寸同时保留ASRelativeDimension等符号作为宏兼容层标注为 Added 的#def ASRelativeDimension等。行为上ASSizeRangeMakeExactSize()被弃用统一改用ASSizeRangeMake。这些类型定义可对照 ASDimension.h 阅读。4.3 布局 Spec 的变化ASStaticLayoutSpec被ASAbsoluteLayoutSpec取代diff 明确记录 Superclass 从ASLayoutSpec变为ASAbsoluteLayoutSpecHeader 从ASStaticLayoutSpec.h变为ASAbsoluteLayoutSpec.hstaticLayoutSpecWithChildren:标记为 Deprecated。新类引入ASAbsoluteLayoutSpecSizing枚举Default与SizeToFit与-absoluteLayoutSpecWithSizing:children:工厂方法ASAbsoluteLayoutElement协议新增layoutPosition、sizeRange属性见 ASAbsoluteLayoutSpec.h。ASWrapperLayoutSpec新增提供wrapperWithLayoutElement:、wrapperWithLayoutElements:与对应 init 方法见 ASLayoutSpec.h。ASLayoutSpec自身移除了-init、-setChild:forIndex:、-childForIndex:新增ASLayoutSpec (Deprecated)分类把旧布局属性alignSelf/ascender/descender/flexBasis/flexGrow/flexShrink/layoutPosition/sizeRange/spacingAfter/spacingBefore收进该分类调试用的 ASCII Art 协议也同步从ASLayoutableAsciiArtProtocol更名ASLayoutElementAsciiArtProtocol。ASLayout类移除constrainedSizeRange、dirty以及基于layoutableObject的构造方法新增ASCalculateRootLayout()、ASCalculateLayout()全局函数和layoutElement属性layoutWithLayoutElement:size:position:sublayouts:等新构造方法取代旧接口见 ASLayout.h。ASRelativeLayoutSpec新增ASRelativeLayoutSpecPositionNone取值。ASDisplayNodeDeprecated.h新增将name改用debugName、preferredFrameSize改用style.preferredSize或style.height/style.width、measure:改用layoutThatFits:、usesImplicitHierarchyManagement改用automaticallyManagesSubnodes、cancelLayoutTransitionsInProgress改用cancelLayoutTransition以及旧状态回调等统一归入弃用分类。源码级印证ASLayoutElement 的实际落地从源码看automaticallyManagesSubnodes的存取与计算逻辑位于 ASDisplayNodeLayout.mm内部标志位读写并在计算布局时临时置位-layoutThatFits:等入口在 ASDisplayNodeLayout.mm 中统一走ASLayoutElementPushContext上下文机制。ASStackLayoutSpec.alignItems默认Stretch的声明见 ASStackLayoutSpec.h。ASButtonNode新增的ASButtonNodeImageAlignmentBeginning/End枚举与imageAlignment属性在 ASButtonNode.h 中定义。五、容器 API 迁移从 View 空间到 Node 空间2.0 最显著的工程变化是集合与表格 API 从视图空间迁往节点空间ASCollectionView/ASTableView上的数据源、代理与操作方法大量弃用对应能力在ASCollectionNode/ASTableNode上成套新增。5.1 ASCollectionNode方法全量补齐diff 中ASCollectionNode.h新增的方法覆盖了 UIKit 集合视图几乎全部常用接口包括数据查询-numberOfItemsInSection:、-numberOfSections、-nodeForItemAtIndexPath:、-indexPathForNode:、-cellForItemAtIndexPath:、-contextForSection:、visibleNodes、indexPathsForVisibleItems交互allowsSelection、allowsMultipleSelection、-selectItemAtIndexPath:animated:scrollPosition:、-deselectItemAtIndexPath:animated:、indexPathsForSelectedItems、-scrollToItemAtIndexPath:atScrollPosition:animated:更新-insertItemsAtIndexPaths:、-deleteItemsAtIndexPaths:、-reloadItemsAtIndexPaths:、-moveItemAtIndexPath:toIndexPath:、-insertSections:、-deleteSections:、-reloadSections:、-moveSection:toSection:、-performBatchUpdates:completion:、-performBatchAnimated:updates:completion:、-waitUntilAllUpdatesAreCommitted、-relayoutItems补充元素-registerSupplementaryNodeOfKind:、ASCellNode新增的supplementaryElementKind、layoutAttributes、indexPath、owningNode属性。数据源/代理协议也整体从ASCollectionView.h移到ASCollectionNode.hASCollectionViewDataSource/Delegate宏被移除新增ASCollectionNode (Deprecated)分类承载旧方法。5.2 ASTableNode对应能力成套新增ASTableNode.h同样补齐全套接口-numberOfRowsInSection:、-nodeForRowAtIndexPath:、-indexPathForNode:、-cellForRowAtIndexPath:、-rectForRowAtIndexPath:、indexPathForSelectedRow、indexPathsForSelectedRows、-indexPathForRowAtPoint:、-indexPathsForRowsInRect:、-indexPathsForVisibleRows以及带withRowAnimation:的增删改、-performBatchUpdates:completion:、-waitUntilAllUpdatesAreCommitted、-scrollToRowAtIndexPath:atScrollPosition:animated:、-relayoutItems、-reloadDataWithCompletion:等新增的 tableNode 版数据源/代理方法tableNode:numberOfRowsInSection:、tableNode:nodeBlockForRowAtIndexPath:、tableNode:constrainedSizeForRowAtIndexPath:、tableNode:willDisplayRowWithNode:、tableNode:willBeginBatchFetchWithContext:等可查 ASTableNode.h。ASTableView.h一侧则是成批弃用initWithFrame:style:、reloadData/reloadDataImmediately、beginUpdates/endUpdates/endUpdatesAnimated:completion:、clearContents/clearFetchedData弃用信息提示应依赖 Interface State 回调而非手动调用等ASTableViewDataSource/Delegate整体弃用并更名为ASTableDataSource/ASTableDelegate。ASCommonTableViewDataSource→ASCommonTableDataSource、ASCommonTableViewDelegate各方法 →ASCommonCollectionDataSource/Delegate的对应关系也记录在ASTableViewProtocols.h/ASCollectionViewProtocols.h的 diff 中。5.3 同步语义与异步索引路径陷阱升级指南特别强调了节点空间与视图空间的同步差异ASCollectionNode由ASCollectionViewUICollectionView子类支撑且异步运行。向空表插入 100 行后立刻调用tableView:numberOfRowsInSection类接口会得到0调用-waitUntilAllUpdatesAreCommitted后才能拿到100但可能阻塞主线程源码实现在 ASCollectionNode.mm内部断言主线程并转发给self.view。传递给collectionView 空间的 indexPath引用的是已同步到底层UICollectionView的数据传递给collectionNode 空间的 indexPath引用的可能是尚未同步的异步数据。ASTableNode同理。例外ASTableNode的-didSelectRowAtIndexPath:在 UIKit 空间回调以保证 indexPath 指向屏幕上的已同步数据。实操规则除非某 API 只存在于 view 空间否则一律使用 node API不要手动与底层 collectionView 通信。此外constrainedSizeForNodeAtIndexPath:从.dataSource移到了.delegate与 UIKit 角色定义对齐若给ASTableNode/ASCollectionNode/ASPagerNode设置了该方法但未设置 delegate代码会静默不回调务必检查。5.4 更新校验与性能建议collection view 更新校验断言已启用若日志出现类似Invalid number of items in section 2. The number of items after the update (7) must be equal to the number of items before the update (4) plus or minus the number of items inserted or removed from the section的报错请核对数据源逻辑。最佳实践优先使用 node blocksnodeBlockForItemAtIndexPath:它们会在后台线程并行执行显著提升性能用节点存储行相关数据需要成批更新的操作尽量合并为一次批量更新。仓库示例工程可作迁移参考diff 中提到 PR #2390 / #2381 将 AsyncDisplayKit 的 example projects 全部转换为新 API对应目录即 examples 与 examples_extra。六、接口状态回调统一为进入/退出成对命名ASDisplayNodeSubclasses.h新增六个状态回调方法构成完整生命周期钩子didEnterPreloadState/didExitPreloadStatedidEnterDisplayState/didExitDisplayStatedidEnterVisibleState/didExitVisibleState它们取代了旧的回调loadStateDidChange:、displayStateDidChange:、visibleStateDidChange:、visibilityDidChange:。在 ASDisplayNodeSubclasses.h 中这些方法均声明为AS_CATEGORY_IMPLEMENTABLE并要求调用superASDISPLAYNODE_REQUIRES_SUPER且保证在主线程回调。配套的状态位也一并改名ASInterfaceStateFetchData移除、ASInterfaceStatePreload新增ASLayoutRangeTypeFetchData→ASLayoutRangeTypePreloadASInterfaceStateIncludesFetchData()→ASInterfaceStateIncludesPreload()。位定义可查 ASDisplayNodeInterfaceState.hPreload 1 1表示元素足够可能上屏、应开始拉取磁盘/网络数据。这些回调与-onDidLoad:、visible/inPreloadState/inDisplayState属性、allowsGroupOpacity等新增能力共同构成 2.0 的节点生命周期体系。七、周边基础设施与新增工具除上述三大主线外diff 还记录了若干值得关注的新增/清理图片下载协议精简ASImageDownloaderProtocolDeprecated、ASImageCacheProtocolDeprecated及其中方法被移除ASBasicImageDownloader只保留ASImageDownloaderProtocol遵循关系见 ASBasicImageDownloader.h。集合差异计算NSArray (Diffing)新增asdk_diffWithArray:insertions:deletions:及带compareBlock:的版本NSArrayDiffing.h用于批量更新时生成插入/删除索引集合。弱引用集合新增泛型ASWeakSetaddObject:/removeObject:/containsObject:/allObjects/count等见 ASWeakSet.h。后台释放队列ASRunLoopQueue.ensureExclusiveMembership、ASDeallocQueue及sharedDeallocationQueue、-releaseObjectInBackground:ASRunLoopQueue.h用于把大对象的释放挪到后台。性能与调试ASDisplayNodeBeta.h新增ASDisplayNodePerformanceMeasurements与measurementOptionsLayoutSpec/LayoutComputation位选项AsyncDisplayKitDebug.h新增ASRangeController (Debugging)的 range debug overlay 系列方法ASLog.h新增ASProfilingSignpost系列宏。其他新增ASMapNode.imageForStaticMapAnnotationBlock、ASCellNode.supplementaryElementKind/layoutAttributes/indexPath/owningNode、ASCollectionViewLayoutInspecting.scrollableDirections、ASDataController的completed前缀查询方法、ASSectionContextsectionName/collectionView、ASViewController (Unavailable)、ASEditableTextNode (Unavailable)等标记。文本节点ASTextNode.attributedString→attributedTexttruncationAttributedString→truncationAttributedText。视频节点ASVideoNode移除三个 delegate 回调videoPlaybackDidFinish:等新增playerLayer。工具函数搬家ASDirectionalScreenfulBuffer等从CGRectASConvenience.h移至CoreGraphicsASConvenience.h后者新增ASCGFloatFromString/FromNumber、CGSizeEqualToSizeWithIn等。八、迁移路线图从编译警告到新 API结合升级指南与 diff 内容推荐按以下顺序完成迁移先升级、后重构pod update Texture到 2.0在旧 API 桥接下跑通现有功能必要时按上文三种方式放宽弃用警告。排查行为差异重点检查ASStackLayoutSpec.alignItems默认Stretch带来的布局变化以及新启用的 collection view 更新校验断言。布局代码转换阅读 layout2-conversion-guide.md把ASStaticLayoutSpec→ASAbsoluteLayoutSpec、ASRelativeSize→ASDimension/ASLayoutSize、旧布局属性 →style.*属性逐条替换ASLayoutElement相关文档见 layout2-quickstart.md 与 layout2-layout-element-properties.md。容器 API 迁移全局搜索tableView/collectionView数据源与代理方法替换为tableNode:/collectionNode:版本更新调用侧为ASTableNode/ASCollectionNode方法注意constrainedSizeFor...移到 delegate并补齐 delegate 赋值。替换状态回调将loadStateDidChange:等替换为didEnterPreloadState/didExitPreloadState等成对方法。清理旧符号按ASDisplayNodeDeprecated.h、ASLayoutSpec (Deprecated)中的弃用信息逐条改写到新属性与方法。九、结语ASDK_API_Diff_1.9.92_to_2.0.html是 2.0 时代最有价值的升级参照物它把 500 余条 API 差异按头文件精确归档与升级指南、Layout 2.0 转换指南互相印证。对升级开发者而言本文归纳的三条主线布局协议统一为ASLayoutElement、容器 API 全面节点化、状态回调成对化覆盖了绝大多数迁移工作量剩余零散变更均可按头文件在 apidiff 目录中逐条核查。赞分享移动开发UI组件【免费下载链接】TextureSmooth asynchronous user interfaces for iOS apps.项目地址https://gitcode.com/gh_mirrors/te/Texture点击查看免费下载相关推荐Texture 2.0 升级迁移指南从 AsyncDisplayKit 1.x 迁移到节点化 Collection/Table APITexture 2.0 升级迁移指南从 AsyncDisplayKit 1.x 迁移到节点化 Collection/Table API 导读 本指南面向正在移动开发UI组件TextureAsyncDisplayKitLayout 2.0 升级指南从 1.x 迁移到 Flexbox 化布局 API 的完整对照TextureAsyncDisplayKitLayout 2.0 升级指南从 1.x 迁移到 Flexbox 化布局 API 的完整对照 适用对象与场景移动开发UI组件Composer 2.0 升级指南从1.x迁移到2.0的全面解析Composer 2.0 升级指南从1.x迁移到2.0的全面解析 前言 Composer 2.0 是一次重大版本更新带来了许多架构改进和新特性。本文将从技术包管理器开发工具CLI上一篇如何快速下载B站4K视频bilibili-downloader完全指南下一篇Formily 2.x 卡片数组组件 ArrayCards 实战指南基于 formily/next 的动态列表表单开发创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考