iOS网络数据安全
在开发应用的时候,数据的安全性很重要,一般会使用post请求来加强数据的安全性,但是这样并不能解决问题,很多软件都可以拦截查看手机的请求数据,所以在提交用户隐私数据时,一般不要使用明文提交,需要进行加密处理
这篇我们讲简单介绍一下最常用的加密算法,MD5
MD5:全称Message Digest Algorithm 5,翻译为“消息摘要算法第5版”
对输入信息生成唯一的128位散列值
输入两个不同的明文不会得到相同的输出值,根据输出值,不能得到原始的明文,即其过程不可逆
由于MD5加密算法具有较好的安全性,而且免费,因此该加密算法被广泛使用,主要运用在数字签名,文件完整性验证以及口令加密等方面
但是现在的MD5已不再是绝对的安全,对此,可以对MD5稍作改进,以增加解密的难度
加盐:在明文的固定位置插入随机串,然后再进行MD5
先加密,后乱序,先对明文进行MD5,然后对加密得到的MD5串的字符进行乱序
iOS开发中对于网络缓存的处理
iOS开发中网络缓存苹果已经提供了比较好用的NSURLCache类,但是只支持GET请求,所以抛去原生的网络缓存类,这里介绍一个比较好用的网络缓存策略
1.创建类继承自AFHTTPSessionManager,然后根据load方法等妙用,自动监测网络状态,获取网络状态后对其处理,有网加载,没网本地取出。
监测网络状态的方法我在上一篇文章中已经介绍了
GET和POST请求接口添加布尔属性,供选择是否选择对该URL缓存
3.每次调用请求接口,先在本地数据库读取缓存,如果本地没有再进行请求,请求完之后对其缓存。这里以```GET ```请求为例, ```POST ```请求也一样的逻辑。
4.提供清楚缓存和获取文件大小接口
iOS中关于网络的一些参数和设定
我们在编写程序的过程中经常需要去获取一些关于网络的参数,比如当前网络环境,手机连接的Wi-Fi名称等等
1.检测当前网络状态
我们常用的AFNetworking中有一个Reachability的类,可以检测当前的网络状态
2.获取当前Wi-Fi名称
如上代码字典info中有3个键值对,key(SSID)对应值为Wi-Fi名称字符串,key(BSSID)对应值为Wi-Fi MAC地址字符串,key(SSIDDATA)对应值为Wi-Fi名称的data数据
标签: .
工程中实现网页的加载
现在iOS工程中我们经常需要加载网页来解决一些经常更新的内容,加载网页的时候我们需要进行一些处理,比如要获取网页中加载进度,标题等等,下面主要描述一下iOS中WKWebView这个类的用法
1.类的初始化,我们需要在工程中需要用到网页的地方创建一个WKWebView
self.webView=[[WKWebView alloc]initWithFrame:SPFrame(0,44,SPScreen_W,SPScreen_H-44)];
2.加载网页链接URL
NSMutableURLRequest*request=[NSMutableURLRequest requestWithURL:[NSURl URLWithString:[UniToyNetworkManager HelpGetUrlStr]]];
[self.webView loadRequest:request];
其实这时候我们已经简单完成了对一个网页的加载,下面主要讲解一下如何获取一些我们在加载网页的时候需要用到的参数
1.网页加载进度
[self.webView addObserver:self forKeyPath:@"estimatedProgress" options:NSKeyValueObservingOptionNew context:NULL];
2.取消长按webView上的链接弹出actionSheet
[self.webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.style.webkitTouchCallout="none";"]
3.根据内容获取webview高度
NSString*fitHeight=[self.webView stringByEvaluatingJavaScriptFromString:@"document.scrollHeight";]
4.获取webView页面内容
NSString*docStr=[self.webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.textContent";]
5.去掉某个标签内容
[self.webView stringByEvaluatingJavaScriptFromString:@"document.getElementById("some-tag-id").remove();"]
6.获取当前页面的title
NSString*title=[self.webView stringByEvaluatingJavaScriptFromString:@"document.title"]
7.获取当前页面的url
NSString*url=[self.webView stringByEvaluatingJavaScriptFromString:@"document.location.href"]
8.获取环境变量
[self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
9.禁止弹出菜单/禁止选中
[self.webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.style.webkitUserSelect='none';" ];
[self.webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.style.webkitTouchCallout='none';" ];
iOS开发之弹出式收藏键
项目中可能遇到这样的需求,用户有4个收藏夹,在音乐播放界面,用户点击收藏按键的时候需要弹出4个收藏夹供用户选择,这时候就需要设计一种弹出式的收藏按键了,比如以下这种方式,点击收藏按键后,会从收藏按键下方弹出4个圆形按键以供用户选择
首先我们需要设定一个block块来收集用户点击圆形按键的行为:typedef void(^SPPopViewBlock)(NSInteger tag),这其中的参数tag,标识的是用户点击的那个圆形按键
接下来我们需要定义所需要用到的属性和方法
初始化方法,初始化当中我们需要定义收藏夹数量,收藏按键中心点位置,一句将用户按键行为的block块
定义完成后,我们需要来编辑4个圆形按键的行为了
4个圆形按键从出现到消失需要写一个简单的动画效果来过渡一下
点击收藏按键弹出4个圆形按键方法
点击界面其他位置,将4个圆形按键收缩起来的方法
iOS开发之跑马灯
一般我们在app首页精彩看到一行通知的小字自右向左划过,这就是跑马灯效果,主要用来发布一些重要想吸引人注意的通知,今天就来封装一个跑马灯效果
思路
让label的宽度自适应内容,然后放到一个背景view上,背景view的clipsToBounds开启。持续的改变label的frame,当label末端的x坐标为0时,调整其首端x坐标。如下,不停的执行这段代码:
代码
iOS音频开发,录音,播放,剪辑,合成
录音
播放
剪辑,将路径filePath下的音频文件从time截取到time2后在resultPath中输入
合成,将路径filePath1和路径filePath2下的音频合成
iOS音波图的绘制生成
我们在实现录音和音乐播放功能的时候,经常需要绘制音波图,这篇文章主要讲如何根据声音自动生成音波图
首先我们先介绍一下如何获取声音的音波数据,根据每秒获取的数据然后绘制图形
利用方法:[self.recorder updateMeters]来获取音波的波值,然后对波值进行处理
获取了音波的数值后,现在我们需要来绘制音波图像了
首先创建一个view类,类中需要3个属性值,总数:totalCount,波值数组:voiceWaves,波值当前数组:currentVoiceWaves
然后开始编写绘制图形的方法:
根据获取到的音波数据绘制图形方法:
清空当前图形方法:
移动播放指针图形
具体效果如下图:
iOS iPhone X 适配
问题一:适配
1.首先简单定义一下iPhoneX
#define IS_IPHONE_X(screen-Height==812.0f)?YES:NO
2.iPhoneX导航栏,状态栏tabar高度
1.导航栏高度88,非iPhoneX手机为64
2.状态栏高度44,非iPhoneX手机为20
3.tabar高度83,非iPhoneX手机为49
3.定义其高度
#define Height_NavContentBar 44.0f
#define Height_StatusBar(IS_IPHONE_X==YES)?44.0f:20.0f
#define Height_NavBar(IS_IPHONE_X==YES)?88.0f:64.0f
#define Height_TabBar(IS_IPHONE_X==YES)?83.0f:49.0f
问题二:push时tabbar向上移动导致一块小黑屏
简单描述一下,这就是一个bug,代码如下
在你的基类导航控制器跳转代理方法中加入这个方法即可:
问题三:UIWebView加载时下方黑屏加载完毕恢复
原因不明,直接上代码,在初始化webview时,设置这个方法即可:
iOS对AFNetworking的二次封装
AFNetworking是一个很好用的网络请求的第三方库,它的很多方法已经封装的很好了,但是做项目的时候,总是有情况需要对网络进行统一处理,比如缓存策略,重复请求管理功能,这些AFN都没有提供直接的方法,比如每次请求回来,都可能存在异常,我们肯定不能在每个请求里都加判断,所以就基于AFNetworking之上做一层封装,向业务层更加友好
首先建一个子类,继承自AFNetworking中的AFHTTPSessionManager类,这个类主要用来处理网络请求
因为真个程序中只需要存在一个AFHTTPSessionManager的子类SPHTTPManager,所以将SP
然后我们需要根据自身需求封装一些工程需要的功能,比如一般都需要用到的post和get请求,我们需要在请求成功的时候对返回的数据进行一些处理,失败的时候对错误信息进行统一处理,所以我们就需要在方法中加入相应的程序
1.post方法
2.get方法