IOS

iOS列表上拉(平滑加载数据)自动加载数据的问题解决

2021-07-11
项目需求 我的的列表需要改变,原来的分页加载采用的是MJRefresh框架进行加载更多数据,这需要有一个上拉动作才能触发,而我的产品的意思是当快要滑动到底部时自动加载下一页数据.我自己看了一下,发现很多app都是采用这种模式. 关于MJRefresh MJRefresh中并没有这样的方法,所以这个效果不一定是MJRefresh实现的,没有实现的小伙伴就不要在MJRefresh中苦苦寻找了. 功能实现 实现方法很简单,需要用到tableView的一个代理方法,就可轻松实现.- (void)tabl

iOS实现无感知上拉加载更多功能的思路与方法

2021-07-10
目录 什么是无感知上拉加载更多 如何实现无感知上拉加载更多 网上的思路(一) 网上的思路(二) MJRefresh代码的追根朔源 总结 什么是无感知上拉加载更多 什么是无感知,这个这样理解:在网络情况正常的情况下,用户对列表进行连续的上拉时,该列表可以无卡顿不停再见新的数据. 如果要体验话,Web端很多已经做到了,比如掘金的首页,还有比如i掘金iOS的App,列表都是无感知的. 说来惭愧,写了这久的代码,还真的没有认真思考这个功能怎么实现. 如何实现无感知上拉加载更多 我在看见这位网友留言的时候

iOS tableView右侧索引视图状态获取的方法实例

2021-06-29
前言 在iPhone和其他iOS的很多程序中都会看到Table View的出现,除了一般的表格资料展示之外,设置的属性资料往往也用到Table View,Table View主要分为以下两种: Plain:这是普通的列表风格  Grouped :这是分块风格. 本文介绍的是iOS tableView右侧索引视图状态获取的相关内容,下面来看正文 需求 一图胜千言! 在触摸右侧索引栏时 需要展示对应的组号名称 手指离开时消失 实现 通过Xcode查看视图层次结构 右侧索引视图的继承关系 是这样的:

iOS获取图片区域主色的方法

2021-06-14
之前的项目有这样的需求,有一个页面可以检索一块区域内图片的主色.效果图如图所示 下面是如何获取区域主色的实现思路: 首先,我们需要从相册,或者相机去获取图片: 其次,得到图片需要截取区域图片: 然后,获取截取图片的主色. 理想中是这样的,但是有很多阻碍,得到的图片需要自适应imageView(imageView的宽高是固定的),截图的得到的区域不是自己想要的区域.这里需要将图片等比例缩放,按照ImageView的宽高. 那现在就直接上代码吧! 首先我们需要等比例缩放Image: /** * 缩放

iOS按比例实现方块图

2021-06-13
本文实例为大家分享了iOS按比例实现方块图的具体代码,供大家参考,具体内容如下 原理:二分法递归实现,就是每次"对半分",分到只剩两个 上代码:SZBlockView @interface SZBlockView : UIView @property (nonatomic, strong) NSArray *data;//数据源 @end #import "SZBlockView.h" #import "SZItemView.h" @implem

浅谈IOS屏幕刷新ADisplayLink

2021-06-07
什么是CADisplayLink 我们在应用中创建一个新的CADisplayLink对象,把它添加到一个runloop中,并给它提供一个target和selector在屏幕刷新的时候调用. 一但CADisplayLink以特定的模式注册到runloop之后,每当屏幕需要刷新的时候,runloop就会调用CADisplayLink绑定的target上的selector,这时target可以读到CADisplayLink的每次调用的时间戳,用来准备下一帧显示需要的数据.例如一个视频应用使用时间戳来计

详解IOS WebRTC的实现原理

2021-06-06
概述 它在2011年5月开放了工程的源代码,在行业内得到了广泛的支持和应用,成为下一代视频通话的标准. WebRTC的音视频通信是基于P2P,那么什么是P2P呢? 它是点对点连接的英文缩写. P2P连接模式 一般我们传统的连接方式,都是以服务器为中介的模式: 类似http协议:客户端?服务端(当然这里服务端返回的箭头仅仅代表返回请求数据). 我们在进行即时通讯时,进行文字.图片.录音等传输的时候:客户端A?服务器?客户端B. 而点对点的连接恰恰数据通道一旦形成,中间是不经过服务端的,数据直接从一

详解IOS如何防止抓包

2021-06-06
目录 抓包原理 防止抓包 一.发起请求之前判断是否存在代理,存在代理就直接返回,请求失败. 二.我们可以在请求配置中清空代理,让请求不走代理 SSL Pinning(AFN+SSL Pinning)推荐 扩展 抓包原理 其实原理很是简单:一般抓包都是通过代理服务来冒充你的服务器,客户端真正交互的是这个假冒的代理服务,这个假冒的服务再和我们真正的服务交互,这个代理就是一个中间者 ,我们所有的数据都会通过这个中间者,所以我们的数据就会被抓取.HTTPS 也同样会被这个中间者伪造的证书来获取我们加密的

详解如何使用ReactiveObjC

2021-06-05
概述 RAC架构框架图 信号流程 基本使用 1.基本控件 UITextField //监听文本输入 [[_textField rac_textSignal] subscribeNext:^(NSString * _Nullable x) { NSLog(@"%@",x); }]; //可根据自己想要监听的事件选择 [[_textField rac_signalForControlEvents:UIControlEventEditingChanged] subscribeNext:^(_

浅谈IOS如何对app进行安全加固

2021-06-05
防止 tweak 依附 通常来说,我们要分析一个 app,最开始一般是砸壳, $ DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /path/to/XXX.app/XXX 然后将解密之后的二进制文件扔给类似 hopper 这样的反编译器处理.直接将没有砸壳的二进制文件扔个 hopper 反编译出来的内容是无法阅读的(被苹果加密了).所以说砸壳是破解分析 app 的第一步.对于这一步的防范,有两种方式. 1.限制二进制文件头内的段 通过在 Xcode 里面工程配

分析IOS RunLoop的事件循环机制

2021-06-04
在RunLoop启动之后会发送一个通知,来告知观察者 将要处理Timer/Source0事件这样一个通知的发送 处理Source0事件 如果有Source1要处理,这时会通过一个go to语句的实现来进行代码逻辑的跳转,处理唤醒是收到的消息 如果没有Source1要处理,线程就将要休眠,同时发送一个通知,告诉观察者 然后线程进入一个用户态到内核态的切换,休眠,然后等待唤醒,唤醒的条件大约包括三种: 1.Source1 2.Timer事件 3.外部手动唤醒 线程刚被唤醒之后也要发送一个通知告诉观察

IOS小组件实现时钟按秒刷新功能

2021-05-20
引言   上一节中我们了解了IOS小组件的刷新机制,发现根本没法实现按秒刷新,但是看别的App里面有做到,以为用了什么黑科技,原来是因为系统提供了一个额外的机制实现时间的动态更新,不用走小组件的刷新机制. Text控件支持显示日期时间,下面是来自官网的代码 计算时间差 let components = DateComponents(minute: 11, second: 14) let futureDate = Calendar.current.date(byAdding: components

iOS实现逐帧动画做loading视图

2021-05-18
本文实例为大家分享了iOS实现逐帧动画做loading视图的具体代码,供大家参考,具体内容如下 我封装了一个可复用的loading视图组件,用于按照一定周期逐帧播放加载动画.代码如下: .h文件 #import <UIKit/UIKit.h> //加载状态 typedef enum { FZImageSequenceLoadingStatusStop = 1, // 停止 FZImageSequenceLoadingStatusLoading, // 加载中 FZImageSequenceLo

IO实现计算器功能

2021-05-10
本文实例为大家分享了IO实现计算器功能的具体代码,供大家参考,具体内容如下 代码: // // ViewController.m // Fraction_Calculator // // Created by 鲁军 on 2021/4/26. // #import "ViewController.h" #import "Calculator.h" @interface ViewController () @property(nonatomic,strong)IBOu

WKWebview非全屏自动播放h5视频的实现方法(Swift、OC)

2021-05-06
前言 WKWebview加载一个视频播放的h5页面时,默认是需要用户点击一下才能播放视频,且视频播放时会全屏播放.如果想要h5页面视频非全屏自动播放该怎么做呢? Swift实现 这个时候就需要设置WKWebview的configuration参数,我们先来看一下Swift的实现,代码如下: let configuration = WKWebViewConfiguration() configuration.allowsInlineMediaPlayback = true if #availabl

iOS 下的图片处理与性能优化详解

2021-04-25
图片在计算机世界中怎样被存储和表示? 图片和其他所有资源一样,在内存中本质上都是0和1的二进制数据,计算机需要将这些原始内容渲染成人眼能观察的图片,反过来,也需要将图片以合适的形式保存在存储器或者在网络上传送. 这种将图片以某种规则进行二进制编码的方式,就是图片的格式. 常见的图片格式 图片的格式有很多种,除了我们熟知的 JPG.PNG.GIF,还有Webp,BMP,TIFF,CDR 等等几十种,用于不同的场景或平台. 这些格式可以分为两大类:有损压缩和无损压缩. 有损压缩:相较于颜色,人眼对光

ios动态库和静态库的区别

2021-04-24
一.什么是库? 库是共享程序代码的方式,一般分为静态库和动态库. 静态库:链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝. 动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存. 二.静态库和动态库的好处 使用静态库的好处: 1.模块化,分工合作 2.避免少量改动经常导致大量的重复编译连接 3.也可以重用,注意不是共享使用 动态库使用有如下好处: 1.使用动态库,可以将最终可执行文件体积缩小 2.使用动态库,多个应用程序共享内存中得

iOS获取设备唯一标识的实现步骤

2021-04-24
目录 1. 常用的UUID 2. MAC 地址 2.1 首先导入下面几个库: 2.2 新建一个文件,继承NSObject,在.m文件导入头文件,以及定义一些宏 3.UUID+自己存储 3.1 获取UUID的两个方法 3.2 首先在项目中添加 KeyChain Sharing 3.3 导入第三方库 Security.framework 3.4 核心代码(代码有点多) 3.4 创建新类,引用 SSKeychain 封装 1. 常用的UUID UDID是一个40位十六进制序列(越狱的设备通过某些工具可

IOS利用CocoaHttpServer搭建手机本地服务器

2021-04-24
缘起 今天用暴风影音看视频,然后发现它有个功能,wifi传片,感觉挺有意思,然后就上网查了下相关内容. 原理 使用CocoaHTTPServer框架,在iOS端建立一个本地服务器,只要电脑和手机连入同一热点或者说网络,就可以实现通过电脑浏览器访问iOS服务器的页面,利用POST实现文件的上传. 实现 1.下载CocoaHTTPServer 2.导入CocoaHTTPServer-master目录下的Core文件夹 3.导入Samples/SimpleFileUploadServer目录下的MyH

IOS内存泄漏检查方法及重写MLeakFinder

2021-04-23
对于iOS开发来讲,内存泄漏的问题,已经是老生常谈的话题.在日常的面试中经常会提到这些问题.我们日常的开发过程中进行内存泄漏的检测,一般是使用instrument工具中的Leaks/Allocation来进行排查,网络上也有比较高效又好用的内存泄漏检测工具,MLeakFinder. MLeakFinder-原理 首先看UIViewController,当一个UIViewController被pop或dismiss的时候,这个VC包括在这个VC上的View,或者子View都会很快的被释放.所以我们