iOS-Swift面向协议编程(二)
上一篇文章iOS - Swift 面向协议编程(一)
已经对Swift的面向协议编程做了介绍,接下来该篇文章将使用面向协议开发(POP)来做下实际的应用
+
上一篇文章iOS - Swift 面向协议编程(一)
已经对Swift的面向协议编程做了介绍,接下来该篇文章将使用面向协议开发(POP)来做下实际的应用
在实际开发中,自定义View基本上是必须的,相信这对我们来说都是比较简单,不过我们还是来回顾一下下~
面向对象开发1 新建一个UIView的FirstTypeView
2 创建一个View的xib文件3 设置xib对应的class进行绑定
4 在FirstTypeView.swift 中实现一个类方法,方便我们外部用xib来初始化FirstTypeView1234567891011import UIKitclass FirstTypeView: UIView { }extension FirstTypeView { class func loadFromNib() -> FirstTypeView { ...
iOS - Swift 面向协议编程(一)
传统的面向对象开发思维方式是将类中实现的相似方法抽取出来,接着放入一个Base类,然后继承于Base类后各个类即可找拥有相同的方法,不用再一个个手动实现。比如:一个Person类,一个Dog类,它们都拥有方法eat,那么就可以新建一个Animal类,将eat方法抽取出来放入其中,然后将Person类和Dog类都继承于Animal。但是,如果现在又有一个Robot类,也需要拥有eat方法,而此时也将其继承于Animal的话显然是不合理的,于是我们就需要转换思维,面向协议开发~
+
OC无法做到面向协议开发,而Swift可以,因为Swift可以做到协议方法的具体实现,而OC不行
面向对象开发传统的面向对象开发思维方式是将类中实现的相似方法抽取出来,接着放入一个Base类,然后继承于Base类后各个类即可找拥有相同的方法,不用再一个个手动实现。比如:一个Person类,一个Dog类,它们都拥有方法eat,那么就可以新建一个Animal类,将eat方法抽取出来放入其中,然后将Person类和Dog类都继承于Animal。但是,如果现在又有一个Robot类,也需要拥有eat方法,而 ...
iOS - Swift 高仿微信
从2016年12月份开始做到 2017年2月16,虽说这个项目看起来不大,但是锻炼人的地方还真是很多的,微信通讯录联系人的按拼音排序,自定义表情键盘中遇到的分页滚动,微信聊天界面的图片显示、语音信息的动画等。挑战着各种各样的需求,本人也将遇到的问题的解决方案做了记录并整理了一下,希望能给iOS程序员同胞们带来帮助。目前基本的聊天已完成,实现了一部分个人信息的修改,功能我会尽快完善的!
+
LXFWeChatSwift 3.0 高仿微信
两个测试账号: lxf lqr 密码都是123456
源码地址码云http://git.oschina.net/LinXunFeng/LXFWeChat
GitHubhttps://github.com/LinXunFeng/LXFWeChat
在此提供存放于百度云的完整项目【高仿微信】- 百度云希望各位能在我的项目上献出一个宝贵的Star谢谢
从2016年12月份开始做到现在,虽说这个项目看起来不大,但是锻炼人的地方还真是很多的,微信通讯录联系人的按拼音排序,自定义表情键盘中遇到的分页滚动,微信聊天界面的图片显示、语音信息的动画等 ...
iOS-ARC与MRC的单例设计模式
单例设计模式(Singleton) 就是保证某个类创建出来的对象从始到终只有一个的一种方案
+
单例设计模式(Singleton)定义就是保证某个类创建出来的对象从始到终只有一个的一种方案
作用
节省内存开销
保证整个程序中使用同一份资源
实现首先将我们的环境设置为非ARC环境,即MRC,如图
在MRC模式下,我们得自己手动释放资源,所以得重写一些与资源创建与释放相关的方法,以保证单例对象的唯一。
新建一个继承于NSObject的类 LXFFileTool,我直接上代码,并写上注释LXFFileTool.h123@interface LXFFileTool : NSObject+ (instancetype)sharedFileTool;@endLXFFileTool.m12345678910111213141516171819202122232425262728293031323334353637383940414243#import "LXFFileTool.h"@implementation LXFFileToolstatic LXFFileTool *_fil ...
iOS-Swift-UIButton中ImageView的animationImages动画执行完毕后,图标变暗
查看官方文档的说明 当该属性设置为true时,按钮在高亮状态下,图片会绘制成高亮(前提是没有手动设置高亮图片)。并且该值的默认值为true所以我们也可以将属性adjustsImageWhenHighlighted设置为false,不让系统自动帮我们设置高亮状态下显示的图片即可。
+
情况贴出重要代码
123456// 设置按钮图片动画数组voiceButton.imageView?.animationImages = [ #imageLiteral(resourceName: "message_voice_sender_playing_1"), #imageLiteral(resourceName: "message_voice_sender_playing_2"), #imageLiteral(resourceName: "message_voice_sender_playing_3")]
12// 开始动画voiceButton.imageView?.startAnimating()
12// 停止动画voiceButton.imageView?.st ...
Swift 3.0 高仿喜马拉雅FM
基于Swift 3.0 编写而成,运行环境要求: Xcode 8.0
+
高仿喜马拉雅FMgitHub: https://github.com/LinXunFeng/LXFFM
说明基于Swift 3.0 编写而成,运行环境要求: Xcode 8.0
LXFFM原OC版: https://github.com/Eastwu5788/XMLYFM从原版作者的源代码上学到了很多,十分感谢.由于只是本人OC转Swift的试练项目,所以有些内容并没有实现,哈哈
效果图
iOS - Swift UITableView的scrollToRow的坑
今天鄙人使用SnapKit来布局cell,然后用scrollToRow来滚到底部就遇到了一个很奇葩的现象。我设置了在键盘弹出后聊天消息列表会自动滚到底部。1.随便输入一条消息,点发送后,在聊天消息列表中并没有滚到最新消息那一行。2.退出键盘不做任何操作再打开键盘也是滚到刚才那里(即最新消息的上一条所在位置)3.只有在退出键盘后把聊天消息列表的消息向上拉一点距离露出最新消息所在的cell之后,再点击才有用
+
简介在tableView中,我们一般会用到scrollToRow这个来控制tableView滚到指定的某一行。一般写法如下所示123456// MARK: 滚到底部func scrollToBottom(animated: Bool = false) { if dataArr.count > 0 { tableView.scrollToRow(at: IndexPath(row: dataArr.count - 1, section: 0), at: .bottom, animated: animated) } ...
iOS-Swift 仿微信聊天图片显示
其实原理比较简单,准备一张图片MaskImgae,先对其进行拉伸,然后按照其轮廓对图片进行裁剪就行了
+
效果图如图所示,图片左侧有个小箭头
原理其实原理比较简单,准备一张图片MaskImgae,先对其进行拉伸,然后按照其轮廓对图片进行裁剪就行了
步骤这里摘重点说,布局什么的按自己意愿去弄吧。我固定了图片的显示大小为 102 * 152
1、对MaskImgae进行拉伸123456// 设置拉伸范围let stretchInsets = UIEdgeInsetsMake(30, 28, 23, 28)// 待拉伸的图片let stretchImage = UIImage(named: "SenderImageNodeMask")// 进行拉伸let bubbleMaskImage = stretchImage.resizableImage(withCapInsets: stretchInsets, resizingMode: .stretch)
拉伸的效果如图
2、对imageView设置裁剪区域这里我的 imageView 叫 chatImgView上面的拉伸效果图是临 ...
iOS-Swift-UICollectionView横向分页的问题
有两种方式可以解决,数据只有11个,要分两页需要16个,那我们可以直接添加数据到16个,然后在dataSource中返回cell时进行判断及处理即可。不过对于现在来说太小题大做了,我选第二种方式~
+
UICollectionView横向分页的问题情况直接看图已经设置collectionView的isPagingEnabled为true了,可是出现了这种情况,原因就是collectionView的contentSize不够。
12345678<UICollectionView: 0x7fc565076000; frame = (0 0; 375 197); clipsToBounds = YES; gestureRecognizers = <NSArray: 0x6180000557e0>; layer = <CALayer: 0x61000022a5a0>; contentOffset: {187.5, 0}; contentSize: {562.5, 192.25} ...
iOS - Swift UICollectionView横向分页滚动,cell左右排版
最近在做表情键盘时遇到一个问题,我用UICollectionView来布局表情,使用横向分页滚动,但在最后一页出现了如图所示的情况
+
情况最近在做表情键盘时遇到一个问题,我用UICollectionView来布局表情,使用横向分页滚动,但在最后一页出现了如图所示的情况
情况分析图是的,现在的item分布就是这个鬼样子现在想要做的,就是将现在这个鬼样子变成另外一种样子,如图那怎么办?只好重新布局item了
解决方案我是自定了一个Layout(LXFChatEmotionCollectionLayout),让UICollectionView在创建的时候使用了它
在 LXFChatEmotionCollectionLayout.swift 中
添加一个属性来保存所有item的attributes12// 保存所有item的attributesfileprivate var attributesArr: [UICollectionViewLayoutAttributes] = []
重新布局1234567891011121314151617181920212223242526272 ...