0%

UICollectionViewLayout——layout实现圆形布局

UICollectionViewLayout子类

基本方法

UICollectionView 和 UITableView 最重要的区别就是 UICollectionView 并不知道如何布局,它把布局机制委托给了 UICollectionViewLayout 子类,默认的布局方式是 UICollectionFlowViewLayout 类提供的流式布局。不过也可以创建自己的布局方式,通过继承 UICollectionViewLayout。

子类需要覆盖父类以下3个方法:

  • prepareLayout
  • layoutAttributesForElementsInRect:(CGRect)rect
  • collectionViewContentSize
Read more »

常用的JS方法

1、base64转二进制(Blob)数据

方法一

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function b64toBlob(b64Data, contentType = '', sliceSize = 512) {
const byteCharacters = atob(b64Data);
const byteArrays = [];

for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {
const slice = byteCharacters.slice(offset, offset + sliceSize);

const byteNumbers = new Array(slice.length);
for (let i = 0; i < slice.length; i++) {
byteNumbers[i] = slice.charCodeAt(i);
}

const byteArray = new Uint8Array(byteNumbers);

byteArrays.push(byteArray);
}

const blob = new Blob(byteArrays, { type: contentType });
return blob;
}

方法二

1
2
3
4
5
6
7
8
9
10
11
function base64toBlob(b64Data, contentType = '') {
const byteCharacters = atob(b64Data);
const byteNumbers = new Array(byteCharacters.length);
for (let i = 0; i < byteCharacters.length; i++) {
byteNumbers[i] = byteCharacters.charCodeAt(i);
}
const byteArray = new Uint8Array(byteNumbers);

const blob = new Blob([byteArray], { type: contentType });
return blob;
}

2、格式化参数对象

Read more »

iOS实现先无动画pop再push,替换当前控制器

iOS开发中会遇到添加成功,发送成功……类似情况,需要先将push前的页面移除调。如果直接调用pop,立刻去push。如果这两个命令写在同一个控制器中,则会发现push根本没有被执行……因为pop已经将该控制器移除,push根本没有机会执行。也可以在上一个控制器通过代理/通知/闭包等操作——没有亲测,感觉麻烦。


所以就选择了下面的方法,先移除路由栈中当前控制器,再新增新的控制器,最后赋值。

废话不多说,直接上代码:

Read more »

iOS实现右滑手势返回

1、申明实现代理

1
2
@interface BaseViewController ()<UIGestureRecognizerDelegate>

2、在viewDidLoad 方法中设置手势并禁用系统滑动手势

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
- (void)viewDidLoad {
[super viewDidLoad];
//1.获取系统interactivePopGestureRecognizer对象的target对象
id target = self.navigationController.interactivePopGestureRecognizer.delegate;

//2.创建滑动手势,taregt设置interactivePopGestureRecognizer的target,所以当界面滑动的时候就会自动调用target的action方法。
//handleNavigationTransition是私有类_UINavigationInteractiveTransition的方法,系统主要在这个方法里面实现动画的。
UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] init];

[pan addTarget:target action:NSSelectorFromString(@"handleNavigationTransition:")];

//3.设置代理
pan.delegate = self;

//4.添加到导航控制器的视图上
[self.navigationController.view addGestureRecognizer:pan];

//5.禁用系统的滑动手势
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}
Read more »

查看git上个人代码量

1
git log --author="username" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' -

统计每个人的增删行数

1
git log --format='%aN' | sort -u | while read name; do echo -en "$name\t"; git log --author="$name" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' -; done
Read more »

2017新的一年已经开始,突然想重置我的个人博客,选择了现在很热门的Github Pages + Hexo 的方式来搭建独立的个人博客。

ren

我的其他博客: