二零一七年八月二十
pod install
| pod update
-
pod install
通常使用点- 安装cocoapods;
- podfile中添加、删除,新依赖库;
- 修改podfile中指定依赖库版本号;
每次执行pod install
命令会先遵循podfile
文件中的改动信息,然后再遵循podfile.lock文件而执行命令。
-
pod update
通常使用点:-
pod update
更新所有依赖库版本; -
pod update PODNAME
更新指定依赖库版本;
pod update
命令会遵循podfile
文件指令下,从而更新依赖库。若未指定依赖库版本,则会默认更新到最新版本,然后会生成新的podfile.lock
文件。
-
Podfile.lock
作用:跟踪,锁定,podfile
文件中依赖库的版本
。
第一次运行pod install
命令时,会生成此文件,此文件会锁定你****此时****podfile
文件中的版本。
之后每次修改podfile
文件,或运行pod update
命令时,会重新生成此文件。
Manifest.lock
Manifest.lock 是 Podfile.lock 的副本,每次只要生成 Podfile.lock 时就会生成一个一样的 Manifest.lock 存储在 Pods 文件夹下。在每次项目 Build 的时候,会跑一下脚本检查一下 Podfile.lock 和 Manifest.lock 是否一致。
参考:
二零一七年八月十八
iOS原生与H5交互
-
JS给OC传消息
1、拦截跳转的方式
JS这边发请求,iOS把请求拦下来,再扒出请求url里的字符串,再各种截取得 到有用的数据
UIWebView 用来监听请求触发也是通过 UIWebView 相关的 delegate method: webView(_:shouldStartLoadWith:navigationType:) 官方文档,方法中返回一个 Boolean,来判定是否让请求继续执行。
2、JavaScriptCore
JS调用OC函数(代码块),给OC值(参数),让OC做一些事情。传值、方法 命名都按web前端开发人员来定义。两端做适配。
-
OC给JS传消息
OC调用JS函数给JS传值,JS函数接到此值(参数)做一些事情。
即: Objective-C执行JavaScript代码:
// 获取当前页面的title NSString *title = [webview stringByEvaluatingJavaScriptFromString:@"document.title"]; // 获取当前页面的url NSString *url = [webview stringByEvaluatingJavaScriptFromString:@"document.location.href"];
例子:弹窗
- 第一种方式:
WebView
直接调用stringByEvaluatingJavaScriptFromString
属性
[webView stringByEvaluatingJavaScriptFromString:@"alert('test js OC')"];
- 第二种方式:
JavaScriptCore
JSContext *context=[webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"]; NSString *alertJS=@"alert('test js OC')"; //准备执行的js代码 [context evaluateScript:alertJS];//通过oc方法调用js的alert
- 第三种就是使用
WKWebview
参考:
- 第一种方式:
二零一七年八月十七
如何加载cocoapods
中的资源图片?
- 1、去
Pod
下Bundle
中取获取资源图片
+ (UIImage *)ht_imageNamed:(NSString *)name ofType:(nullable NSString *)type {
NSString *mainBundlePath = [NSBundle mainBundle].bundlePath;
NSString *bundlePath = [NSString stringWithFormat:@"%@/%@",mainBundlePath,@"SMPagerTabView.bundle"];
NSBundle *bundle = [NSBundle bundleWithPath:bundlePath];
if (bundle == nil) {
bundlePath = [NSString stringWithFormat:@"%@/%@",mainBundlePath,@"Frameworks/CcfaxPagerTab.framework/SMPagerTabView.bundle"];
bundle = [NSBundle bundleWithPath:bundlePath];
}
if ([UIImage respondsToSelector:@selector(imageNamed:inBundle:compatibleWithTraitCollection:)]) {
return [UIImage imageNamed:name inBundle:bundle compatibleWithTraitCollection:nil];
} else {
return [UIImage imageWithContentsOfFile:[bundle pathForResource:name ofType:type]];
}
}
- 2、真机获取不到
pod
中的资源bundle
,所以图片显示不出来。可以这样取cocoapods
中的bundle
资源图片
How to load resource in cocoapods resource_bundle
// fix:真机加载不到Bundle中资源图片。 date:20170816
NSBundle *frameworkBundle = [NSBundle bundleForClass:self.class];
NSURL *bundleURL = [[frameworkBundle resourceURL] URLByAppendingPathComponent:@"SMPagerTabView.bundle"];
NSBundle *resourceBundle = [NSBundle bundleWithURL:bundleURL];
UIImage *image = [UIImage imageNamed:@"shadowImg" inBundle:resourceBundle compatibleWithTraitCollection:nil];
self.shadowImgView.image = image;
二零一七年八月二号
- topLayoutGuide & bottomLayoutGuide
- topLayoutGuide表示Y轴的最高点限制,表示不希望被Status Bar或Navigation Bar遮挡的视图最高位置。
- bottomLayoutGuide表示Y轴的最低点限制,表示不希望被UITabbarController遮挡的视图最低点距离supviewlayout的距离。
- frame & bounds
- frame就是相对于父视图的布局位置与大小:
- bounds与frame最大的不同就是坐标系不同,bounds原点始终是(0,0),而frame的原点则不一定,而是相对于其父视图的坐标。
阅读文章: