jacky's blog

宁静致远


  • 首页

  • 归档

  • 标签

写个简单的Swift检测Controller没有销毁的工具

发表于 2018-01-27 |
思路在Swift的代码中,Controller没有销毁大部分的原因都是没有weak self。怎么检测一个Controller没有释放呢? 1、当一个对象销毁的时候,它会调用deinit的方法,一般Controller页面我们都是放在UINavigationController里面的,然后调用push和pop,实现我们页面的跳转。 2、继承UINavigationController,重写push方法,在push方法里面把push的controller的名字放到单例的数组里面,deinit的时候在把当前的controller从单例里面释放,然后检测单例里面有没有controller的相同名字存在2个以上的。 代码实现因为是检测Controller有没有销毁的工具,然后打印到console里 ...
阅读全文 »

使用RxSwift开发登录注册忘记密码模块总结

发表于 2018-01-27 |
刚好有新的项目,就把登录这一块的逻辑全部用RxSwift去写了,用很少的代码量实现了所有的逻辑,这就是RxSwift的魅力吧,下面是项目登录注册模块的演示。 登录当前登录页面的逻辑分为密码登录和验证码登录,点击上面tab进行切换。上面的tab是我自定义的控件,切换的值通过block传回来。 忘记密码控件: 密码登录的时候需要显示,验证码登录需要隐藏。获取验证码控件:密码登录的时候需要隐藏,验证码登录需要显示。输入密码图标在验证码登录切换的时候变成验证码的图标。 基于以上的逻辑,我增加一个全局的响应bool变量isPasswdLoginSeg,让这个变量的的值跟着切换的值变换,然后把响应变量的bool值绑定到相应的控件上,实现相关控件的隐藏和显示。 默认是密码登录1let isPassw ...
阅读全文 »

iOS设置UIView阴影遇到的一些坑

发表于 2017-11-02 |
目的是为了给这块view下半部分加上阴影,实现代码如下。 topView.layer.masksToBounds = false topView.layer.shadowOffset = CGSize.init(width: 0, height: 3) topView.layer.shadowOpacity = 0.3 topView.layer.shadowRadius = 3 topView.layer.shadowColor = ViewUitl.colorWithHexString(hex: "#6691FB").cgColor topView.layer.cornerRadius = 5 topView.layer.borderWidth = 1 topVie ...
阅读全文 »

调整UITableView手势跟随页面整体滑动总结

发表于 2017-11-02 |
产品中经常出现手势滑动的需求,但是结合tableview的手势就会出现冲突,下面是一些tableview结合全局手势的实践方案。 页面滑动 给页面添加滑动手势 let pan = UIPanGestureRecognizer() pan.rx.event.subscribe(onNext: { [weak self] (recognizer: UIPanGestureRecognizer) in self?.panGestureStationTogetherAction(recognizer) }).addDisposableTo(disposeBag) lineListView?.stationHeaderDetailView.addGestureRecognizer(pan) ...
阅读全文 »

RxSwift网络琏式请求总结

发表于 2017-11-02 |
RxSwift是在 Apple 推出 Swift 后, ReactiveX 推出 Reactive Extensions 系列一个实现库。下面介绍工作中使用RxSwift解决异步网络请求场景的实践。 业务场景为根据当前定位位置请求附近公交、地铁、水巴数据。根据右侧的筛选项筛选出不同的数据,进行请求。 创建数据事件源Observable 请求地铁网络数据 func searchSubwayData(_ location: CLLocationCoordinate2D, _ isUserLocation: Bool = false) -> Observable<Bool> { return Observable<Bool>.create { [wea ...
阅读全文 »

DjangoRestful结合hui框架后台实践总结

发表于 2017-11-02 |
Django REST frameworkDjango REST framework is a powerful and flexible toolkit for building Web APIs. Project setupCreate a new Django project named tutorial, then start a new app called quickstart # Create the project directory mkdir tutorial cd tutorial # Create a virtualenv to isolate our package dependencies locally virtualenv env source env/b ...
阅读全文 »

iOS播放多种视频格式,实现DLNA|AirPlay投射盒子总结

发表于 2017-11-02 |
视频播放VLC media player is a free and open-source software, a portable and cross-platform media player and streaming media server written by the VideoLAN project. Wikipedia MobileVLCKit.framework这是VLC开源框架,基于这个框架,我对自己视频资源做了一个web服务器,可以进行资源浏览,这样可以通过webview进行浏览视频资源。通过js调用可以输出webview链接,并传给VLC进行播放。 支持格式mp4、avi、mkv、3gp、rmvb、wmv、mpg、flv、swf DLNADigital Livin ...
阅读全文 »

命令行批量重命名文件名

发表于 2017-07-19 |
场景1切图名字加上业务名UI切的图命名很简洁,没有加上业务名不好区分,容易造成重名,并且不易区分,例如下图 这是其中一个模块的切图列表,为了区分,我们切图可以这么做 使用rename在每个文件名前面加上业务名(searchall_) rename 's/(\w+)/searchall_$1/' * 之后效果 场景2加上@2x和@3xui对每个图片命名2x3x比较麻烦,可以使用rename进行解决,所有的图片ui命名可以@2x可以后缀跟个2,@3x可以后缀跟个3 在每个图片名字后面加个(x) rename 's/(\w+)/$1x/' * 然后在2x、3x前面加上(@) rename 's/(\dx)/\@$1/' * 最 ...
阅读全文 »

Realm二次封装实现增删查改

发表于 2017-07-19 |
Realm 是 SQLite 和 Core Data 的替代者,得益于其零拷贝的设计,Realm 比任何 ORM 都要快很多。几分钟内就能学会使用 Realm。 封装了基础类DBBaseObject,基础类实现了增删查改的方法,所有数据Object都继承DBBaseObject新建Dog类,继承DBBaseObject class Dog: DBBaseObject { dynamic var name = "" dynamic var age = 0 } 增let dog = Dog() dog.name = "xiaogou" dog.add() 查let dogs = Dog.query(Dog.self, "name ...
阅读全文 »

Swift特性filter、map、reduce项目实现总结

发表于 2017-07-19 |
filterfilter实现功能是,对符合条件的数组内的元素过滤出来,组成一个新的数组 场景1扫描蓝牙设备,对蓝牙设备进行分类,major为1是站台,为0是公交,蓝牙设备返回模型为 @interface IbeaconModel : NSObject @property (nonatomic,assign) int major; @property (nonatomic,assign) int minor; @end 使用filter过滤出站台和公交的设备 let ls = self?.ibeaconArr?.filter({$0.major == 1}) let lb = self?.ibeaconArr?.filter({$0.major == 0}) 场景2司机反馈界面,选中内容 ...
阅读全文 »
1234…6
jacky

jacky

51 日志
3 分类
20 标签
简书 掘金 GitHub
© 2019 jacky
由 Hexo 强力驱动
主题 - NexT.Pisces