骁驰的杂货店


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 公益404

客户端Git版本管理流程分享

发表于 2019-04-29 | 分类于 git版本管理

客户端Git版本管理流程分享

1
2
3
4
5
依托Git自身强大的Gitflow特性,我们可以更高效地进行团队内多人或者跨业务线之间的开发协作,
在需求版本开发中,可以进行对团队内每个成员的代码质量管控,互不干扰相互独立的需求开发,避免
多人代码糅合发生冲突或冗余需求下架污染发布版本带来的各种风险
Git分支管理分为常驻分支和临时分支

常驻分支

master分支

1
2
3
4
5
6
7
8
该分支维护最稳定的线上版本,管理整个项目最新的生命周期,每次发版前在生产环境的测试就是在该
分支进行。
代码来源:hotfix分支、develope版本分支
每次发版打版本基于该分支打版本tag,tag命名规范如:master_7.0.3
备注:开发人员切勿直接提交代码到该分支
阅读全文 »

涂鸦功能需求分析

发表于 2017-11-09 | 分类于 多媒体开发

涂鸦功能需求分析

  • 在短视频进入编辑界面的时候在视频预览播放层上用户点击涂鸦按钮调出涂鸦面板。

  • 在涂鸦面板为第一次响应的时候,编辑界面面板不响应。

  • 涂鸦过程中可以选择画笔颜色,同时可以调节画笔宽度。

  • 用户可以撤销涂鸦,进行清屏操作。

技术背景

  • 涂鸦功能涉及到iOS开发Cocoa框架中绘图操作。

解决方案

一、UIBezierPath 绘制画板方法

UIBerierPath的原理

1
2
3
4
5
6
7
8
9
10
11
12
13
1、 UIBezierPath使用UIBezierPath可以创建基于矢量的路径,此类是Core Graphics框架关于路径的封装。使用此类可以定义简单的形状,如椭圆、矩形或者有多个直线和曲线段组成的形状等。
2、UIBezierPath是CGPathRef数据类型的封装。如果是基于矢量形状的路径,都用直线和曲线去创建。我们使用直线段去创建矩形和多边形,使用曲线去创建圆弧(arc)、圆或者其他复杂的曲线形状。
3、使用UIBezierPath画图步骤:
创建一个UIBezierPath对象
调用-moveToPoint:设置初始线段的起点
添加线或者曲线去定义一个或者多个子路径
改变UIBezierPath对象跟绘图相关的属性。如,我们可以设置画笔的属性、填充样式等。
阅读全文 »

视频添加文字和贴纸需求分析

发表于 2017-11-09 | 分类于 多媒体开发

视频添加文字和贴纸需求分析

  • 贴纸除了天气海拔等物理来源之外,需要通过服务下载贴纸资源,外加内置系统表情。

  • 在视频编辑界面添加贴纸层,对贴纸进行拖动、缩放、旋转、删除操作。

  • 在视频编辑界面添加文字层,可以改变文字颜色,拖、缩放、旋转、删除操作。

技术背景

  • 对贴纸和文字进行操作,涉及到iOS UIGestureRecongizer手势响应的管理。

  • 对文字视图做操作编辑状态下恢复原状,涉及iOS仿射变换知识。

解决方案

在视图对象上添加手势,并且在各个手势selector API里面实现对视图的控制。

一、利用UIGestureRecongizer方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 添加所有的手势
- (void) addGestureRecognizerToView:(UIView *)view {
// 旋转手势
UIRotationGestureRecognizer *rotationGestureRecognizer = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotateView:)];
[view addGestureRecognizer:rotationGestureRecognizer];
// 缩放手势
UIPinchGestureRecognizer *pinchGestureRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchView:)];
[view addGestureRecognizer:pinchGestureRecognizer];
// 移动手势
UIPanGestureRecognizer *panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panView:)];
[view addGestureRecognizer:panGestureRecognizer];
}
阅读全文 »

ios深浅拷贝

发表于 2016-04-20 | 分类于 Foundation

引言

在对于自定义的对象支持copy功能,也就是我们要给自定义的对象发送copy message,那我们就要手动实现NSCopying协议。在项目开发中我们如果对某个字典或者数组对象进行了一次mutbleCopy其实系统默认的调用了如下API:

1
- (id)mutableCopyWithZone:(nullable NSZone *)zone;

浅拷贝

如果你现在通过retain或者alloc创建并持有了一个对象,浅拷贝就是重新拷贝了一个指向当前这个对象的指针,此时就有两份指针同时指向当前对象的内存区域,即指向同一块内存区域,对象只有一份并没有发生任何变化。

1
2
3
NSString *hdfString = @"haodf.com";
NSString *str = hdfString;
NSString *str2 = [str copy];

深拷贝

深拷贝拷贝当前指针指向的对象,系统会随机给拷贝的对象重新分配一块内存,深拷贝以后,两份对象的内存地址不一样,指针指向也不一样。深拷贝会把当前容器中的对象重新拷贝一份放到另一个容器中,拷贝后的指针指向新的容器。

1
2
3
NSString *hdfString = @"haodf.com";
NSString *str = [hdfString copy];
NSString *str2 = [str mutableCopy];
阅读全文 »

图片的压缩方式

发表于 2016-03-14 | 分类于 性能优化

引言

在我们项目开发中我们经常会遇到关于图片的处理。

在图片上传中我们会从用户体验方面考虑用户的流量是否能够很好的支持上传的图片,我们会对图片先压缩后上传。

当我们考虑到手机的本身内存我们会对下载的图片进行压缩,以便节省手机内存成本。

读取图片的方式

1
2
1、UIImageJPEGRepresentation()此API需要两个参数,一个是图片对象,一个是压缩系数,但是图片的质量会有所下降,但是体积不会变。
2、UIImagePNGRepresentation(),只需要一个图片的对象参数,不会对图片压缩,原图展示。

对图片的质量进行压缩

1
2
3
4
5
6
7
8
9
10
11
12
13
14
1、UIImageJPEGRepresentation()返回的数据量要比UIImagePNGRepresentation()大很多,前者返回的数据量要比后者小很多,前者返回的数据量大概是115kb,后者返回的数据大概为190kb,相差很大。
2、如果对UIImageJPEGRepresentation()的系数设置为0.5,再加上本身不是很追求图片的质量,那么会大大节省图片的资源大小,大概为11kb。
+ (UIImage *)resuceImage:(UIImage *)hdfImage percent:(CGFloat)percent {
UIImage *image = nil;
NSData *data = nil;
if(hdfImage) {
data = UIImageJPEGRepresentation(hdfImage, percent);
image = [UIImage imageWithData:data];
}
return image;
}
阅读全文 »

iOS解决滑动页面卡顿的基本技巧

发表于 2016-02-24 | 分类于 性能优化

引言

在开发中我们常常会遇到布局比较复杂的cell,在滑动的时候会导致界面不流畅,出现卡顿的现象,这是由于CPU计算和GPU渲染,之间未及时交换数据丢失帧导致的结果。

imageView尽量设置为不透明

  • opque尽量设置为YES

当imageView的opque设置为YES的时候其alpha的属性就会无效,imageView的半透明取决于其图片半透明或者imageView本身的背景色合成的图层view是半透明的。

如果图片全部不是半透明就不会触发图层的blend操作,整个图层就会不透明。

如果叠加的图片有出现半透明的,就会立马触发图层的blend操作,整个图层不透明。

  • opque设为NO

当opque为NO的时候,图层的半透明取决于图片和其本身合成的图层为结果。

  • 背景色尽可能设为alpha值为1

当某一块图层的alpha和其superView的背景色alpha不一样的时候会触发alpha合成操作,这是一项看似很简单但却是非常消耗CPU性能的操作。至于alpha叠加的概念如果有问题可以查看官方说法。

UIView的背景色设置

  • UIView的背景色尽量不要设置为clearColor,这样也会触发alpha叠加,在tableView滑动的时候是非常消耗性能的。子视图的背景色尽可能设置成其superView的背景色,这样图层合成的时候不会触发blend操作。

  • 最好不使用带alpha通道的图片,如果有alpha尽量让美工取消alpha通道。

    alpha通道的概念特地请教了下公司UI MM,是透明的意思。

阅读全文 »

ios Monkey性能测试

发表于 2016-02-22 | 分类于 测试

原理

为了减轻测试人员的测试任务,monkey测试是利用测试工具执行相应的测试脚本,实现对程序的执行过程、操作流程进行录制


利用foneMonkey测试工具包

  • 下载foneMonkey测试工具包,一般都是.zip的需要解压
  • xcode打开工程,添加一个target

MacDown logo

  • 重命名

MacDown logo

  • 选取刚才创建的target并将解压好的FontMonkey倒入工程目录

MacDown logo

阅读全文 »

Cocoapods在项目中的使用

发表于 2016-02-19 | 分类于 效率

引言

Cocoapods是在Mac OSX和iOS应用程序上利用ruby的依赖管理gem来构建的的一款第三库依赖的管理工具,通过它可以很方便的去管理项目中的三方库,随着版本的迭代可以快速升级第三方库版版本,也能够搜索出比较有价值的三方库,同时还为开发者自动配置好编译器的各种设置选项,为开发者节省大量没有技术含量去设置build phasese和link flags.

Cocoapods的核心组件

  1. Cocoapods/Cocoapod

    该组件包含了Cocoapods的基本功能,每当使用pod命令时都能够激活该组件.

  2. Cocoapods/Core

    该组件支持了Cocoapods的Podfile和Podspec文件处理.

  3. Podfile

    在此文件里面我们可以高度自定义指定所需的三方库版本号等.

  4. Podspec

    该文件描述了一个库是怎样被添加到工程里的,可以列出源文件指定库的依赖关系.

  5. Cocoapods/XcodeProj

    创建.xcWorkSpace .xcodeProj,整合所有工程文件.

Cocoapods的安装

  • 更新ruby源,因为亚马逊的被墙了所以使用淘宝的ruby源
1
2
3
gem sources --remove https://rubygems.org/
gem sources -a https://ruby.taobao.org/
gem sources -l
  • 用gem命令开始安装Cocoapods
1
sudo gem install Cocoapods

备注

1
2
3
4
如果出现
While executing gem ... (Errno::EPERM)
Operation not permitted - /usr/bin/xcodeproj
执行 sudo gem install -n /usr/local/bin cocoapods开通权限安装
阅读全文 »
骁驰

骁驰

异样的产品理念,精湛的程式技能,赢得世界的一次掌声!

8 日志
6 分类
14 标签
RSS
GitHub JianShu
© 2019 骁驰
由 Hexo 强力驱动
|
主题 — NexT.Pisces v5.1.3