Tag: asyncdisplaykit

具有纹理的模型视图意图

ASRenderModelProtocol和ASRenderModelIdentifier是用于在ASModelSyncronizer上标识模型的便捷ID对象和协议。 ASModelSyncronizer是基于模型唯一标识符的模型管理器。 它与线程安全性在后台调度程序上并发工作 您可以在基本模型对象上继承ASRenderModelProtocol 你应该做一些这样的业务逻辑 我说过我的目标是,必须在Node初始化完成之前初始化所有子节点属性。 GeekTree0101 / RxMVVM-纹理 RxMVVM纹理– RxSwift MVVM模式最佳实践,建立在Texture(AsyncDisplayKit)上,并用Swift编写 github.com 在大型仓库中,您可以看到alll子节点是异步初始化的。 即使在超级节点完成其初始化之后,所有子节点也不知道其属性值已被自己初始化。 首先,意图将使用模型初始化 接下来,意图应该与业务逻辑一起订阅(突变关闭) 变异是业务逻辑的封闭 update(to :)是更新目标视图属性,表示输出 interact(from :)表示输入 如果需要在绑定值之后更新布局。 然后在update(to 🙂 setNeedsLayout参数上插入更新目标节点。 您可以从上图看到在节点初始化之前初始化的所有子节点属性都已完成。 用户将触摸个人资料图片。 届时,个人资料视图将发出点击事件 配置文件点击事件将调用从后端服务下载图像 3. ASModelSyncronizer将使用业务逻辑自动更新所有已识别的用户模型。 [1〜2]用户交互>发出>目的 [2〜3]意图>后端服务 [3〜4]后端服务>更新模型的突变关闭 [4〜5]变异>模型更新 [5〜6]模型>突变关闭以进行更新视图 GeekTree0101 / Rx可可纹理 RxCocoa纹理– RxCocoa纹理扩展库。 github.com

使用Texture(aka AsyncDisplayKit)的8个月

我必须承认我爱React&React Native。 我从2014年开始使用React,从2016年开始使用React Native。我之所以喜欢RN,并不是因为它具有跨平台的机制,而是因为它在设计用户界面时具有务实的方法以及能够将屏幕组成的能力。 组件可以具有自己的状态,如果状态发生了变化,则取决于此确切状态的用户界面将重新呈现以反映新值。 它加快了开发速度,也使开发人员避免了状态不反映值的错误。 我的大部分时间都花在开发本机应用程序上,为此,我一直试图在实践上找到与React Native相当的应用程序,但没有用。 直到我偶然发现AsyncDisplayKit(现在称为“ Texture”)。 我虽然应该分享到目前为止的经验。 我要搜索的是一个包含以下内容的框架/库: 设计用户界面时的确定性行为。 我对UIKit关于约束冲突的警告感到厌倦,尤其是在使用xib和情节提要时。 易于使用,创建任何UI都需要可理解的代码。 能够调整复杂组件的大小以适合其内容,尤其是在包含图像和属性文本时。 众所周知,在调整包含其他UIView的复杂UIView的大小以适应其全部内容时,UIKit很难掌握。 旋转设备时情况会变得更糟。 它必须能够与可通过Cocoapods获得的大量自定义控件和视图一起使用。 一定要快。 快速,快速。 毕竟,我们是在谈论本机iOS。 Facebook为此提供了ComponentKit和Yoga。 但是,我发现ComponentKit的语法很难使用,尽管它非常快并且受React启发。 在撰写本文时,YogaKit(Yoga的iOS API)仍处于测试阶段,但即使不是,我也发现它的语法有些冗长。 绊倒Texture(以前称为AsyncDisplayKit)感觉就像呼吸新鲜空气。 这很简单。 它的文档只有几页,并且根据9种布局系统(在撰写本文时)来进行节点放置,其中可能最常用的是5种。 Texture中的布局系统可预测,快速且易于使用。 开箱即用即可兼容Objective C和Swift。 没有惊喜。 它具有一个简单的动画引擎,该引擎将使用类似React Native的方法来计算从一种布局到另一种布局的过渡,该方法只需几行代码(通常只有一行)即可在同一视图中更改UI。 涵盖了我四处移动视图时所需的一半情况。 当需要使用自定义控件时,它与UIKit惊人地兼容。 它很快。 快速燃烧。 它进行有关在后台线程中进行渲染的计算,并仅将主线程用于显示。 它使用C ++计算对象放置。 为了达到我使用普通UIKit对Texture所做的性能,与我使用Texture相比,我需要编写数千行代码。 遵循React和Angular在UI组件化方面的领导,Texture大致基于Flexbox布局方法。 一切都是纹理中的节点,它是标准UIView的包装。 ASTableNode是UITableView的包装,ASDisplayNode是UIView的包装,ASImageNode是UIImageView的包装。 ASDisplayNode具有一些属性,这些属性定义诸如调整大小时的行为以及默认大小是什么。 还提供了便利功能,例如背景色,拐角半径等。如果要使用除标准UIView之外的其他功能(例如来自外部框架的视图或可可豆荚),则可以轻松初始化ASDisplayNode并传递同时执行内容视图,这将使您可以在将要使用任何其他ASDisplayNode的任何地方使用它。 节点的放置是通过创建ASLayoutSpec(它们是放置指导者)来确定的。 ASStackLayoutSpec是最常见的。 它将节点内部的节点垂直或水平放置,并通过元素,轴等之间的间距进行参数化。内部的每个组件的大小调整都不会具有与其他组件相同的优先级。 flexGrow为0.5表示此组件的增长将少于堆栈中其余组件的增长(后者为1.0),并且将导致对象之间的大小相似。 堆栈内部所有元素的flex为1.0意味着所有元素将尝试具有相同的大小。 LayousSpecs可以放入其他LayoutSpecs中。 我被要求开发一个具有复杂业务逻辑的应用程序,涉及乘船旅行。 […]

单独重新加载单元格时,UITableViewCell内容会闪烁

我有一个表视图链接到一个NSFetchedResultController (即加载数据,也跟踪更改数据绑定到FRC) 我没有在我的单元格中使用AutoLayout (由于在iOS 8中引入了巨大的性能下降)。 我正在手动布局单元格的内容(使用-(void)layoutSubviews )。 另外,根据内容计算行的高度,并正确地caching/无效。 如果任何与我的数据相关的条件发生变化,相关的单元格单独更新(使用整个-(void)controllerWillChangeContent:…通过-(void)controllerDidChangeContent:…实现的委托方法)行更新的animation是: UITableViewRowAnimationNone 这里的问题是,我的单元格具有透明的背景,我可以看到一些视觉噪声(很可能是实际的单元格被垂直拉伸,我不能肯定地说,因为他们真的是短暂的和短暂的) [self.tableView reloadRowsAtIndexPaths:…]; 。 我已经尝试了很多东西无济于事! 以下是我尝试过的不起作用的东西: 实现-(CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath ,返回估计高度的准确值。 设置self.tableView.rowHeight=UITableViewAutomaticDimension; ,帮助很多,但不解决它。 在[self.tableView beginUpdates];禁用animation[self.tableView beginUpdates]; 并在[self.tableView endUpdates];后启用[self.tableView endUpdates]; -(void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 事情有一点帮助: 使细胞不透明(即为细胞设置背景颜色)。 奇怪的是,文物似乎是在实际的细胞内容。 更多信息 我的单元格的大部分内容都是来自AsyncDisplayKit (ASTextNode,ASImageNode)的节点,但是用它们的UIKitreplace它们并不能解决问题。 我所有的视觉更新都发生在主线程上。 我总是确保这一点。 这个问题并不是无处不在,而是经常存在。 如果有帮助,他们似乎发生更多的插入第二个单元格后。 logging方法-(void)layoutSubviews在我的单元格中显示,每次更新时,具有更新条件的单元格将连续重新加载3次,而其他单元格只会更新一次。 我不强制任何[cell layoutIfNeeded]; 或[cell setNeedsLayout]; 任何地方。 使用[self.tableView reloadData];重新加载整个表视图[self.tableView reloadData]; 对我来说不是一个select。 […]

使用AsyncDisplayKit添加自定义button

我正在开发一个IOS应用程序。 我使用Facebook AsyncDisplayKit库。 我想在ASNodeCell中的一个button我得到了“ variables”节点是未被初始化当被块捕获如何添加UIButton或UIWebView控制在ASNodeCell请帮助我 dispatch_queue_t _backgroundContentFetchingQueue; _backgroundContentFetchingQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0); dispatch_async(_backgroundContentFetchingQueue, ^{ ASDisplayNode *node = [[ASDisplayNode alloc] initWithViewBlock:^UIView *{ UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem]; [button sizeToFit]; node.frame = button.frame; return button; }]; // Use `node` as you normally would… node.backgroundColor = [UIColor redColor]; [self.view addSubview:node.view]; });