0%

iOS上传图片后台旋转展示问题

在一次上传图片到服务器后,去后台页面查看,发现iOS显示的图片总是旋转90℃的,而Android上传的图片展示正常的。

经过一番google之后发现是iOS相机加入了方向传感器,它能够记录下拍摄时相机的方向,并将这一信息保存在照片中。照片的存储方式还是没有任何改变,它仍然是以相机的坐标系来保存,只是当相机来浏览这些照片时,相机可以根据照片中的方向信息,结合此时相机的方向,对照片进行旋转,从而转到适合人们观看的角度。

但是很遗憾,这一标准并没有被广泛的传播开来,或者说始终如一的贯彻,这也导致了本文所讨论的问题。

原文地址

Read more »

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

我的其他博客: