首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Swift 自定义布局实现瀑布流视图

自打 Apple 在 iOS6 中引入 UICollectionView 这个控件之后,越来越多 iOS 开发者选择将它作为构建 UI 首选,如此吸引人原因在于它定制化程度非常高,非常灵活...查阅苹果文档可以得知,UICollectionView 布局是抽象类 UICollectionViewLayout 子类,它定义了 UICollectionView 中每个 item 布局属性叫做....声明一个变量表示布局中列数量:cols3.声明一个数组变量用于缓存计算好布局属性:[UICollectionViewLayoutAttributes]4.声明一个数组变量用于存放每列高度:[CGFloat...当 UICollectionView 需要一些布局信息时候,它会去调用布局对象一些函数,这些函数执行是有一定次序,如图所示: 所以我们继承自 UICollectionViewLayout 子类必须要实现以下方法...numberOfItems(inSection: 0) // 最小高度索引 var minHeightIndex = 0 // 遍历 item 计算并缓存属性

2.3K30

UICollectionView设置组背景和组圆角-Swift

---- 最近由于我们UI设计钟情于圆角搞得我很方,各种圆角渐变,于是就有了下面这篇给UICollectionView组设置圆角和背景色一个小封装,拿出来和大家分享一下,里面的具体一下细节都在代码注释里面...我们都应该知道UICollectionView我们要想自定义一些东西或者布局几乎都是通过Layout下手,那我们要给它设置组背景色和组圆角是不是也在这里进行呢?...我们大致思路是这样: 给UICollectionView 每一组添加一个修饰View,然后在这个修饰View上我们设置组圆角和背景色,最后我们把CollectionCell 设置成 Clean背景就可以达到我们想要效果...numberOfItems(inSection: section) ??...} 不能忘记了PPReusableView,它代码也比较简单,如下 import Foundation import UIKit // MARK: - 重复使用视图 class PPReusableView

3.5K51
您找到你想要的搜索结果了吗?
是的
没有找到

使用 UICollectionView 实现首页卡片轮播效果

前言 今天跟大家来聊聊一个强大 UI 控件:UICollectionView。...UICollectionView 是 iOS6 之后引入一个新 UI 控件,与 UITableView 有着很多相似的地方,在开发过程中我们都会选择使用它们俩来为 App 整个页面进行布局,比如说淘宝首页...;相比 UITbleView,UICollectionView 功能比它要强大多,它支持水平与垂直俩种方向布局,开发者可以完全自定义一套 layout 布局方案,实现出意想不到效果。...思路分析 通过观察上面的图我们可以得出,这个网易云轮播控件有三个特点,分别是: 1.支持图片手动横向滚动2.支持图片自动滚动播放3.底部分页控件会高亮显示出当前图片是哪一张 好了,既然已经分析出来了它特点...JUST DO IT 想到滚动,大家首先想到肯定是用 UIScrollView + UIImageView 方式来实现,但是 UICollectionView 给我们提供了更好选择,因为它本身继承自

1.8K20

与小清新距离 你只差一个RxKotlin !

Rx系列最经典基于观察者模式带给大家直观编程开发体验,受到很多开发者青睐。...观察者,可观察者对象,如果细分有Schedulers,Flow对象等,Rx很好理解,就四大模块,观察者和被观察对象,他们产生操作schdulers调度器, 它们两者产生action可操作Flow...流,具体细节参考推荐文章。...data class 是用来声明一个class,好比c中def,js中var申明变量对象一样。 SearchService :用过retrofit也很明白,定义一个抽象API接口。...通过这个简单栗子,发现不管用rxJava, 还是只用retrofit, 通过使用rxkotlin将业务流程变得更加清晰,那么kotlin是否也有他操作符,当然他也有过滤器,转换器,拆分符和rxjava

88010

iOS_RxSwift使用(文档整理)

(Driver会,不适用于点击事件) ControlEvent:UI控件产生事件,无Error,mainThread订阅监听 以上3共享 五、Observer观察者 响应事件都是观察RxSwift...六、Observable & Observer 既是监听序列 也是 观察者,如:field.text/switch.on/segmentedControl选中/datePick选中/… RxSwift...已定义辅助类型,它们既是监听序列也是观察者: AsyncSubject:事件完成后只发出最后一个元素/Error(即使是先订阅后产生) PblishSubject:只收订阅后元素 ReplaySubject...sequence 热信号 冷信号 是序列 是序列 无论是否有观察者订阅,都使用资源(产生热能) 观察者订阅之前,不使用资源(不产生热能) 变量/属性/常量,点击坐标,鼠标坐标,UI控件值,当前时间…...异步操作,HTTP连接,TCP连接,流… 通常包含N个元素 通常包含1个元素 无论是否有观察者订阅,都会生成序列元素 晋档有订阅观察者时才产生序列元素 序列计算资源通常在所有订阅观察者之间共享 通常为每个订阅观察者分配计算资源

1.5K30

RxSwift-KVO底层探索(下)

这一篇我们就开始分析RxSwift对KVO封装,看完这一篇,你估计也会由衷感慨:底层源码思路是有相同 RxSwift - KVO简介 RxSwift 对KVO调用主要有两种方式: rx.observe...person.removeObserver(self, forKeyPath: "name") RxSwift - KVO底层探索 首先分析在 RxSwift 世界必然是由序列,第一步分析序列创建....finishWithNilWhenDealloc(target) observeWeaklyKeyPathFor内部创建序列 finishWithNilWhenDealloc 针对提前释放变量容错...序列订阅得以响应 下面还缺一个点:关于KVO在RxSwift世界里面是不需要移除观察,下面开始解析 override func dispose() { super.dispose()...dispose 完美看到观察移除 总结:纵观RxSwiftKVO流程也就是中间者模式!

34120

RxSwift底层原理及结合MVVM架构在项目中应用

ReactiveX 官方给Rx定义是:Rx是一个使用可观察数据流进行异步编程编程接口。...--- 要想充分理解RXSwift核心逻辑,那么首先必须要知道RXSwift里包含哪几个角色,以及它们职责。...减少变量使用,由于它跟踪状态和值变化,因此不需要再申明变量不断地观察状态和更新值。...####被观察者(Observable) 它主要负责产生事件,实质上就是一个可被监听序列(Sequence)。 Observable 这个类就是Rx框架基础,我们称它为可观察序列。...Observable ` ==异步产生==>` event(element : T) ####观察者(Observer) 它主要负责监听事件然后对这个事件做出响应,或者说任何响应事件行为都是观察

1.7K10

RxSwift 系列(一) -- Observables

为什么使用RxSwift? 我们编写代码绝大多数都涉及对外部事件响应。当用户点击操作时,我们需要编写一个@IBAction事件来响应。我们需要观察通知,以检测键盘何时改变位置。...我们使用KVO来检测变量变化。所有这些不同系统使我们代码增加了不必要地复杂。如果有一个一致系统来处理我们所有的调用/响应代码,难道不是更好吗?Rx就是这样一个系统。...RxSwift是用于大多数主要语言和平台响应扩展(即Rx)正式实现。...概念 每一个Observable实例都是一个序列 Observable序列相比于Swift序列关键优势点在于它能够异步地接收元素。这是RxSwift精髓所在,其他一切都扩展了这个概念。...ObserverType参数,它将被订阅自动接收由可观察序列事件和元素,而不是在返回生成器上手动调用next() 如果一个Observable发出一个next事件(Event.next(Element

1.1K70

RxSwift 系列(九) -- 那些难以理解概念

前言 看完本系列前面几篇之后,估计大家也还是有点懵逼,本系列前八篇也都是参考RxSwift官方文档和一些概念做解读。...本篇主要来深入了解一些RxSwift实战中用到一些重要知识点,这里面有很多自己理解,所以不免会有一些错误地方,还请大家多多交流,如有发现错误地方,欢迎评论。...他们该做啥做啥,只要听到宝宝哭声时候,他们给宝宝喂奶就行了。这就是一个简单观察者模式。...理解了观察者模式这两个概念就很好理解了,Observable就是可被观察,也就是我们说宝宝,他也是事件源。而Observer就是我们观察者,也就是当收到事件时候去做某些处理爸爸妈妈。...观察者需要去订阅(subscribe)被观察者,才能收到Observable事件通知消息。

2.1K70

Klee:用 C++ 实现数据驱动开发

Value 可以隐式转换为 Reactive 使用,此时写接口被隐藏,但依赖方仍能观察到数据变化。...该名称要求即时更新,意味着该控件需要注册这些通知: 用户信息观察者 企业信息观察者 企业配置观察者 群信息观察者 语言变更广播 把展示规则整理好,写出正确代码并不算困难,做好异步逻辑和更新维护才是麻烦...---- 与 RxSwift 对比 同为 Native 数据驱动开发框架,Klee 从设计思路上与主流 RxSwift 等框架有所不同。...RxSwift 单输入源代码简洁清晰,但多输入源场景需要开发者使用各种操作符来连接生成新序列,学习门槛稍高。...实践表明,开发同一个功能,代码量大约只有传统开发方式 60%,且具备更好可读性和复用性。 待框架经过更大规模实际检验,同时 API 保持稳定后,再进行对外开源。

2.2K30

用Swift写一个响应式编程库

Reactive Programing 说到响应式编程,ReactiveCocoa 和 RxSwift 可以说是目前 iOS 开发中最优秀第三方开源库了。...比如用户输入、单击事件、变量值等都可以看做一个流,你可以观察这个流,并基于这个流做一些操作。“监听”流行为叫做订阅。响应式就是基于这种想法。 废话不多说,撸起袖子开干。...observer 是一个局部变量,在 signal调用完后,就会被销毁,所以需要在 Signal 中保存该对象,可以给 Signal 添加一个数组,用来保存需要延长生命周期对象。...不过这里还存在很多问题,比如我们应该在适当时机移除观察者,现在我们观察者被添加在 subscribers 数组中,这样就不知道该移除哪一个观察者,所以我们将数字替换成字典,用 UUID 作为 key...还有我们对 Disposable 处理也不够优雅,可以模仿 RxSwift 中 DisposeBag 做法。上面这些问题可以留给读者自己去思考了。(更多内容可以查看我主页)

1K50

RxSwift介绍(三)——更加灵活Subject

前一篇文章讲述 RxSwift 框架中最重要类 Observable ,但是其局限性只能作为被订阅者被动接收信号并响应事件。...与之前RAC框架中 Subject 类功能非常相似,既能攻也能受,是不仅可以成为可观察对象被动接受事件,还可以成为观察者主动发送事件。...在 RxSwift 框架中,提供了四种类型 subject,首先要了解一点就是提供四种 subject 创建方式最主要区别:当一个新订阅者订阅到subject对象时,能否收到 subject...所以 ReplaySubject 不可滥用且缓存区大小必须合理进行设置,必要时手动进行释放管理 Variable 本身是对 BehaviorSubject 封装,创建时也必须设置一个默认值。...貌似现在UI层很多都是 Variable 来管理,但 RxSwift 也封装了很多关于UI,issue回复中说以后会销毁,注意是销毁 Variable 这个类。

1.6K30

手把手带你撸一个网易云音乐首页(三)

为了进一步提高代码质量,我们可以为这些 Cell 定义一个基类 BaseViewCell,这样通过该基类,我们就可以设置一些默认属性,减少一些不必要编码工作;另外,通过观察你会发现,大部分 Section...但是,通过观察你会发现它 UI 样式其实是有讲究,就是在同一个页面中,它第二个 item 也需要露出一部分,这该如何去实现呢!...根据文档,Apple 在 UICollectionViewFlowLayout 定义中提供了一个重写函数: func targetContentOffset(forProposedContentOffset...UICollectionView 滚动最大偏移量与最小偏移量也是就 0 每次滚动停止都会调用上述函数 func targetContentOffset(...), 在这个函数中有一个参数 proposedContentOffset...不过,由于搜索栏需要自定义一些样式,我们可以先定义一个 UISearchController 成员变量,将它属性初始化好以后,再进行赋值,代码如下: self.searchController

2.3K10

RxSwift - Why

" + $1 } .map { "Greetings, \\($0)" } .bindTo(greetingLabel.rx_text) 在 UITableView 和 UICollectionView...不过不是很难解决,你只需要添加一个附近爱变量来持有挂起请求就可以了。 下一个问题是如果请求失败,你需要做就是混乱重试逻辑,捕获需要被清理重试操作。...当 cell 刚进入 tableView 可视区域时候,我们才去获取图片,这种做法也是可以,因为如果用户滑动太快,那么很多请求就会被取消了。...: 可以组合 <- 因为 Rx 是组合昵称 复用 <- 因为它是可组合 声明 <- 因为定义是不可改变,而只是数据改变 可理解和简洁 <- 提高抽象水平并且移除过渡状态 稳定 <-...有一个所有 Rx 操作符 巨大列表,并且列出了包含所有 支持当前 RxSwift 操作符。 每个操作符,都对应一个 宝石图 解释了它用法。 但是如果你需要一些操作符没有在列表上怎么办?

73420

用Swift写一个响应式编程库

Reactive Programing 说到响应式编程,ReactiveCocoa 和 RxSwift 可以说是目前 iOS 开发中最优秀第三方开源库了。...比如用户输入、单击事件、变量值等都可以看做一个流,你可以观察这个流,并基于这个流做一些操作。“监听”流行为叫做订阅。响应式就是基于这种想法。 废话不多说,撸起袖子开干。...observer 是一个局部变量,在 signal调用完后,就会被销毁,所以需要在 Signal 中保存该对象,可以给 Signal 添加一个数组,用来保存需要延长生命周期对象。...不过这里还存在很多问题,比如我们应该在适当时机移除观察者,现在我们观察者被添加在 subscribers 数组中,这样就不知道该移除哪一个观察者,所以我们将数字替换成字典,用 UUID 作为 key...还有我们对 Disposable 处理也不够优雅,可以模仿 RxSwift 中 DisposeBag 做法。上面这些问题可以留给读者自己去思考了。

85970
领券