工程中实现网页的加载

2019-2-22 王建伟 iOS开发

现在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';" ];

评论(0) 浏览(0)

iOS开发之弹出式收藏键

2019-1-18 王建伟 iOS开发

项目中可能遇到这样的需求,用户有4个收藏夹,在音乐播放界面,用户点击收藏按键的时候需要弹出4个收藏夹供用户选择,这时候就需要设计一种弹出式的收藏按键了,比如以下这种方式,点击收藏按键后,会从收藏按键下方弹出4个圆形按键以供用户选择

首先我们需要设定一个block块来收集用户点击圆形按键的行为:typedef void(^SPPopViewBlock)(NSInteger tag),这其中的参数tag,标识的是用户点击的那个圆形按键

接下来我们需要定义所需要用到的属性和方法

初始化方法,初始化当中我们需要定义收藏夹数量,收藏按键中心点位置,一句将用户按键行为的block块

定义完成后,我们需要来编辑4个圆形按键的行为了

4个圆形按键从出现到消失需要写一个简单的动画效果来过渡一下

点击收藏按键弹出4个圆形按键方法

点击界面其他位置,将4个圆形按键收缩起来的方法

评论(0) 浏览(17)

iOS开发之跑马灯

2019-1-11 王建伟 iOS开发

一般我们在app首页精彩看到一行通知的小字自右向左划过,这就是跑马灯效果,主要用来发布一些重要想吸引人注意的通知,今天就来封装一个跑马灯效果

思路

让label的宽度自适应内容,然后放到一个背景view上,背景view的clipsToBounds开启。持续的改变label的frame,当label末端的x坐标为0时,调整其首端x坐标。如下,不停的执行这段代码:

代码

评论(0) 浏览(20)

iOS音频开发,录音,播放,剪辑,合成

2019-1-4 王建伟 iOS开发

录音

播放

剪辑,将路径filePath下的音频文件从time截取到time2后在resultPath中输入

合成,将路径filePath1和路径filePath2下的音频合成

评论(0) 浏览(24)

iOS音波图的绘制生成

2018-12-29 王建伟 iOS开发

我们在实现录音和音乐播放功能的时候,经常需要绘制音波图,这篇文章主要讲如何根据声音自动生成音波图

首先我们先介绍一下如何获取声音的音波数据,根据每秒获取的数据然后绘制图形

利用方法:[self.recorder updateMeters]来获取音波的波值,然后对波值进行处理

获取了音波的数值后,现在我们需要来绘制音波图像了

首先创建一个view类,类中需要3个属性值,总数:totalCount,波值数组:voiceWaves,波值当前数组:currentVoiceWaves

然后开始编写绘制图形的方法:

根据获取到的音波数据绘制图形方法:

清空当前图形方法:

移动播放指针图形

具体效果如下图:

评论(0) 浏览(17)

iOS iPhone X 适配

2018-12-21 王建伟 iOS开发

问题一:适配

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时,设置这个方法即可:

评论(0) 浏览(29)

iOS对AFNetworking的二次封装

2018-12-14 王建伟 iOS开发

AFNetworking是一个很好用的网络请求的第三方库,它的很多方法已经封装的很好了,但是做项目的时候,总是有情况需要对网络进行统一处理,比如缓存策略,重复请求管理功能,这些AFN都没有提供直接的方法,比如每次请求回来,都可能存在异常,我们肯定不能在每个请求里都加判断,所以就基于AFNetworking之上做一层封装,向业务层更加友好

首先建一个子类,继承自AFNetworking中的AFHTTPSessionManager类,这个类主要用来处理网络请求

因为真个程序中只需要存在一个AFHTTPSessionManager的子类SPHTTPManager,所以将SP

然后我们需要根据自身需求封装一些工程需要的功能,比如一般都需要用到的post和get请求,我们需要在请求成功的时候对返回的数据进行一些处理,失败的时候对错误信息进行统一处理,所以我们就需要在方法中加入相应的程序

1.post方法

2.get方法

评论(0) 浏览(33)

iOS预编译文件设置以及常用宏记录

2018-12-7 王建伟 iOS开发

创建一个iOS工程的时候,为了方便,我们一般会设置大量的宏,宏我们一般会写在一个.pch文件中,然后我们需要将.pch文件的路径在工程中设置一下,以达到预编译的作用

方法一:

在Finder中找到pch文件后,直接拖到这里:Build Settings ->Apple LLVM7.0 - Language -> Prefix Header。这样设置的话,就将pch文件的位置固定了,如果将工程换个位置,就找不到pch文件了

方法二:

在Finder中找到pch文件后,直接拖到这里,别停下,还没有结束,将前面的内容删除,只留下pch名字,还有上一层的名字,然后在最前面加上$(SRCROOT),然后就结束了

例子:$(SRCROOT)/ruanjian/PrefixHeader.pch

这样的好处就是,不管你把工程移动到哪里,都可以找到pch文件

下面是一些工程中常用的宏整理:

1.屏幕宽度 #define SPScreen_W [UIScreen mainScreen].bounds.size.width

2.屏幕高度 #define SPScreen_H [UIScreen mainScreen].bounds.size.height

3.导航栏高度 #define TOP_H (SPScreen_H == 812.0?44.0f:20.0f)

4.颜色RGB #define SPRGBColor(R,G,B,A) [UIColor colorWithRed:R/255.0 green:G/255.0 blue:B/255.0 alpha:A]

5.控件位置 #define SPFrame(X,Y,W,H) CGRectMake(X,Y,W,H)

6.参照元素底部位置 #define SPGetMaxY(view) CGRectMaxY(view.frame)

7.参照元素宽度位置 #define SPGetMaxX(view.frame)

8.参照元素宽 #define SPGetWidth(view) view.frame.size.width

9.参照元素高 #define SPGetHeight(view) view.frame.size.height

10.点位置 #define SPPoint(X,y) CGPointMake(X,Y)

11.AppDelegate单例 #define SPAppDelegate ((AppDelegate*)[UIApplication sharedApplication].delegate)

12.NSUserDefaults存储数据 #define SPSetDefaults(value,key) [[NSUserDefaults standardUserDefaults] setObject:value forKey:key]

13.NSUserDefaults读取数据 #define SPReadDefaults(key) [[NSUserDefaults standardUserDefaults] objectForKey:key]

14.沙盒地址 #define SPDefaultPath NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDOmainMask,YES)[0]

15.block弱引用 #define SPSelf __weak typeof(self) weakSelf = self

16.字体大小设置 #define SPFont(n) [UIFont systemFontOfSize:n]

评论(0) 浏览(31)

项目中用户数据本地化处理方案

2018-11-29 王建伟 iOS开发

项目中用户数据本地化处理方案

项目中我们经常会对用户的一些属性进行本地话处理,比如:用户的账号密码,登陆有效期限等等,程序启动的时候首先需要对这些属性进行处理从本地将这些数据读取到程序的用户类当中,然后根据用户类中的属性的值进行下一步处理

首先我们需要新建一个用户类:比如User类,在user中定义自己需要的属性,比如:

由于user类肯定是一个全程序都需要用到的类,所以将user类设定成一个单例,单例的好处就是,在程序的全局中我们都可以调用他的方法和修改它的属性,牵一发而动全身。

由于用户的属性一般会保存在本地,用户后续持续打开程序的时候不必要进行繁琐的登陆操作,所以用户类创建的时候我们需要讲本地的数据读取进用户的属性中,然后才可以根据用户的属性进行判断,程序才能继续走下去,用户的属性一般很多很杂,有时候还需要持续的更新,添加,所以我们需要用一种方法来对用户属性进行初始化,最好是能自动读取用户的属性名称,然后根据用户属性名称自行去本地查找赋值,这样可以避免我们在对类的属性进行更新修改添加的时候需要修改初始化程序,方便,不容易出错。这时候就需要用到runtime自动在初始化的时候进行类属性名称的读取。

这边的SPReadDefault(property)是一个宏,封装的是[[NSUserDefaults standardUserDefaults] objectForKey:key]是NSUserDefaults类的一个方法用来读取存储在本地的键值对数据,和它对应的还有一个方法是用来存储键值对数据的,[[NSUserDefaults standardUserDefaults] setObject value forKey:key],由于程序的用户属性并不多且关系也不复杂,所以这里选用NSUserDefaults类来存储用户属性,否则可以选用新建一个数据库来存储复杂的用户属性。

初始化完成后,我们需要根据我们需要用到的功能来编辑相应的方法,一般有2个方法是必须的,一个是保存类的属性值到本地,一个是讲本地的数据清除

方法1:保存类的属性值到本地

方法2:本地的数据清除

评论(0) 浏览(33)

登录按键的动态效果的封装和实现

2017-5-19 王建伟 iOS开发

登录按键的动态效果的封装和实现

阅读全文>>

评论(0) 浏览(126)

网站备案号:京ICP备11043289号-1 北京市公安局网络备案 海1101084571
版权所有 北京育灵童科技发展有限公司 Copyright © 2002-2019 www.elight.cn, All Rights Reserved