动态路由

什么是移动端路由层:

路由层的概念在服务端是指url请求的分层解析,将一个请求分发到对应的应用处理程序。移动端的路由层指的是将诸如App内页面访问、H5与App访问的访问请求和App间的访问请求,进行分发处理的逻辑层。

Read more

链式编程思想-函数式变成思想计算器

编程思想

先简单介绍下目前已知的编程思想。

面向过程:处理事情以过程为核心,一步一步的实现。

面向对象:万物皆对象

链式编程思想:是将多个操作(多行代码)通过点号(.)链接在一起成为一句代码,使代码可读性好。a(1).b(2).c(3)

  • 链式编程特点 : 方法的返回值是block,block必须有返回值(本身对象),block参数(需要操作的值)

  • 代表 : Masonry

响应式编程思想 : 不需要考虑调用顺序,只需要知道考虑结果,类似于蝴蝶效应,产生一个事件,会影响很多东西,这些事件像流一样的传播出去,然后影响结果,借用面向对象的一句话,万物皆是流。

  • 代表 :KVO

函数式编程思想 是把操作尽量写成一系列嵌套的函数或者方法调用

  • 函数式编程特点 : 每个方法必须有返回值(本身对象),把函数或者Block当做参数,block参数(需要操作的值)block返回值(操作结果)

  • 代表 : ReactiveCocoa

-

Read more

MultipeerConnectivity框架,近场通信的基本使用

Multipeer connectivity是一个使附近设备通过Wi-Fi网络、P2P Wi-Fi以及蓝牙个人局域网进行通信的框架。互相链接的节点可以安全地传递信息、流或是其他文件资源,而不用通过网络服务。此框架是在iOS7以后推出,旨在替代GameKit下的GKPeerPickerController通信。通过此框架我们可以直接连接同一网络下的设备,让其直接进行类似微信,qq那样的即时通讯效果。

原理

其中通讯的原理,是利用节点来进行广播服务(标示符),其他节点可以通过服务(标示符)发现广播。并对此节点进行连接。在项目中可以将广播和发现放在一起实现,这样既可以发现并连接到其他节点,同时也可以被其他节点所搜索链接。服务的命名规则为由ASCII字母、数字和“-”组成的短文本串,最多15个字符。通常,一个服务的名字应该由应用程序的名字开始,后边跟“-”和一个独特的描述符号

Read more

Pod私有库素材管理

​ 首先说说场景,由于以前项目是基于小组件化功能开发最后再拼合起来。某一些模块内需要用到一些UI素材,做法就是在 .podspec中的 resource_bundle中添加素材的路径,执行 pod install后添加到pod里面

1
2
3
4
5
s.resource_bundles = {
#素材路径
#采用的是keyValue形式
'Bundle名字' => ['路径/Resource/Asset/**/**.png']
}

如上,pod install时候就会在路径文件夹下,导入所有.png素材到工程里面.

这是网上普遍做法,且 cocoapod.podspec 文件中也是默认这样导进去素材的.这样导进素材有什么问题呢?

install完,素材只是简单的copy到了项目bundle里面(PS:素材文件夹命名也不正规)。会有以下问题:

  1. 管理起来麻烦
  2. 如果图片资源放到 .xcasset 里面 Xcode 会帮我们自动优化、可以使用 Slicing 等,但是放在 bundle里面并不会压缩素材等,等项目大了,包越来越大

所以,调研了网上做法,踩了坑之后决定写一篇文章记录下做法,这也是 包瘦身 一个方法.由于从0记录了整个过程,我会从创建私有库开始写起,如果你已经有了私有库,直接可以跳去第二步看起

Read more

正则表达学习

正则表达学习

在线正则表达式测试地址 <- 点我

Sample1:

找出以 lefelefe_x 单词开头,以 wsy 结尾的字符串。比如:lefe name is wsy 是合法的,而 lef name is wsy 是非法的。

正则表达式为:(^(?:lefe|lefe_x)\b.{0,}wsy$)

1.^表示从字符串的开始位置匹配,^(?:lefe|lefe_x) 表示以 lefe 或者 lefe_x 开头;
2. | 表示或,比如 A | B | C ,表示 A,B 和 C 中任意一个;
3. () 表示一个组,(?:) 表示不捕获这个分组;
4. \b 表示匹配一个单词的边界,在这里只能匹配 lefelefe_x;
5.匹配字符串的开头和结尾后,基本上完成了题目的要求,但是字符串lefe(lefe_x)和wsy之间可以是任意字符,. 表示匹配任意字符(不包含换行符),{0,}表示匹配0个或多个字符,则.{0,} 表示匹配0个或多个任意字符(不包含换行符);
6.$表示从字符串的结尾处开始匹配,wsy$ 则表示以 wsy 结尾;

Read more

ScrollView、TableView、CollectionView 联动一种实现思路

ScrollView、TableView、CollectionView 联动一种实现思路

首先看看效果:

  1. 带悬停View头部的类型,可以上下拉刷新

scrollViewHoldHeader

2.不带悬停View头部的类型,可以上下拉刷新

(PS.图床上传GIF有问题,经常出现卡死问题,直接运行DEMO比较直观)

Demo地址

联动思路实现

核心思路

大部分处理方案

由于联动是在最底部的 ScrollView 上面添加一个 TableVIew 或者 CollectionView 之类的, 最大难点就是 手势处理 . 嵌套 ScrollView之后,需要一个条件来控制某个具体时刻那个 ScrollView 响应滑动事件。

通常,我们会在 ScrollView 代理方法里面

1
2
3
4
5
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {

//blablabla 逻辑

}

例如,我们会实现这样一个逻辑,最底部有一个 mainScrollViewmainScrollView 上有一个 SubScrollView, 这样就类似一个双 ScrollView嵌套场景了

1
2
3
4
5
6
7
8
9
10
11
//写个伪代码
if (scrollView.contentOffset.y > maxOffsetY){
mainScrollView.isScrollEnabled = false;
subScrollView.isScrollEnabled = true;
}else{
// 当 subScrollView 滑动到顶部时,停止响应,mainScrollView 开始响应
if scrollView.contentOffset.y < 0{
subScrollView.isScrollEnabled = false;
mainScrollView.isScrollEnabled = ture;
}
}

代理方法里面 scrollViewDidScroll 中进行判断,当 mainScrollView 划出了 maxOffsetY ,停止响应滚动,继续滑动时候,就是 subScrollView 响应滚动了

但是,在实际操作上有个很大问题,使用者并不是总能滑动到 maxOffsetY 地方,停下手,进行下一次滑动,如果滑动大于 maxOffsetY 地方, mainScrollView 就会滚动到 maxOffsetY 之后,停止响应,是因为这是一次手势, subScrollView 也不会响应,使用者就有中断感觉,需要第二次滑动才能继续滚动

Read more

Hello World

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment

iOS7 以上监听音量键Tips

iOS7 以上监听音量键Tips

iOS7已经废弃 MPMusicPlayerController 这个类与方法 (还是能使用,但对于以后代码迭代,最好替换掉 ) , 如果需要控制系统音量,需要使用 MPVolumeView

以下是一些使用监听音量变化的Tips

需求:音量键拍照 && 拍照无声黑科技

1
2
//代码来看,MPVolumeView 是一个 UIView 的子类
@interface MPVolumeView : UIView <NSCoding>

设计思路:

镜头模块需要监测音量键,音量变化触发拍照功能,为此可以设置一个单例来监测

Read more