今日学习

二零一七年八月二十

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 是否一致。

参考:

pod install vs. pod update

关于 Podfile.lock 带来的痛


二零一七年八月十八

iOS原生与H5交互

  • JS给OC传消息

    1、拦截跳转的方式

    JS这边发请求,iOS把请求拦下来,再扒出请求url里的字符串,再各种截取得 到有用的数据

    UIWebView 用来监听请求触发也是通过 UIWebView 相关的 delegate    method:
    web​View(_:​should​Start​Load​With:​navigation​Type:​) 
    官方文档,方法中返回一个 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

    参考:

    Objective-C与JavaScript交互的那些事

    OC调JS |
    JS调OC

    关于iOS7里的JavaScriptCore framework


二零一七年八月十七

iOS 中 Cocoapods 的 Bundle

cocoapods 管理图片资源和字体库

如何加载cocoapods中的资源图片?
  • 1、去PodBundle中取获取资源图片
+ (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的原点则不一定,而是相对于其父视图的坐标。

阅读文章:

  1. UIViewController、UIViewController生命周期

  2. Cocoa-Swift-UIViewController布局Tips

你可能感兴趣的:(今日学习)