小鹏笔记 第一期(持续更新)
开发Tips
CABasicAnimation
动画进入后台后消失的问题
项目中的界面过度动画是使用CABasicAnimation创建的,在测试的过程中,发现在动画出现的时候,如果将app放到后台一会儿,再进入后台就出现动画消失的情况,查找资料后,发现是CABasicAnimation有个属性,removedOnCompletion,该属性的默认值是YES,查看系统的API,发现对该属性的描述是,当设置该值为YES时,一旦动画活动持续时间通过,动画将被删除,所以猜测是这个原因导致动画在后台时,被移除掉了,果然,将该属性设置为NO之后,就可以正常播放动画了。具体代码如下,记录下遇到的问题。
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
animation.duration = 1.0;
animation.fromValue = @1;
animation.toValue = @0.1;
animation.repeatCount = MAXFLOAT;
animation.removedOnCompletion = NO;
[dot addAnimation:animation forKey:nil];
代码片段
使用OC
写的 CRC
16位 MODBUS
校验
+ (NSString *)getCrc16_MODBUSWithString:(NSString *)str{
NSArray *array = [[NSArray alloc]initWithArray:[self seperateStr:str byLength:2]];
unsigned short tmp = 0xffff;
unsigned short ret1 = 0;
Byte buff[10240] = {};
for (int i = 0; i < array.count; i++) {
buff[i] = [[self decimalStringFromHexString:array[i]] intValue];// 这个是10进制转换成16进制
}
for(int n = 0; n < array.count; n++){
tmp = buff[n] ^ tmp;
for(int i = 0;i < 8;i++){ /*此处的8 -- 指每一个char类型又8bit,每bit都要处理*/
if(tmp & 0x01){
tmp = tmp >> 1;
tmp = tmp ^ 0xa001;
}
else{
tmp = tmp >> 1;
}
}
}
/*CRC校验后的值*/
printf("校验后的值%X\n",tmp);
/*将CRC校验的高低位对换位置*/
ret1 = tmp >> 8;
ret1 = ret1 | (tmp << 8);
printf("高低位对换后的值ret: %X\n",ret1);
NSString *returnStr = [NSString stringWithFormat:@"%X",ret1];
return [self addZero:returnStr withLength:4];
}
+ (NSMutableArray *)seperateStr:(NSString *)str byLength:(int)length{
//举例 828384 以 2个 为单位 拆分
NSMutableArray *returnArray = [[NSMutableArray alloc] init];
for (int i = 0; i < (str.length - length) + 1; i=i+length) {
NSString *twoStr = [str substringWithRange:NSMakeRange(i, length)];
[returnArray addObject:twoStr];
}
return returnArray;
}
+ (NSString *)decimalStringFromHexString:(NSString *)string{
NSString * decimalStr = [NSString stringWithFormat:@"%lu",strtoul([string UTF8String],0,16)];
return decimalStr;
}
//字符串补零操作
+ (NSString *)addZero:(NSString *)str withLength:(int)length{
NSString *string = nil;
if (str.length==length) {
return str;
}
if (str.length<length) {
NSUInteger inter = length-str.length;
for (int i=0;i< inter; i++) {
string = [NSString stringWithFormat:@"0%@",str];
str = string;
}
}
return string;
}
CRC-32 MPEG-2
C
语言实现
//调用
+ (NSString *)getCrc32_mpegWithString:(NSString *)str{
NSArray *array = [[NSArray alloc]initWithArray:[self seperateStr:str byLength:2]];
Byte buff[10240] = {};
for (int i = 0; i < array.count; i++) {
buff[i] = [[self decimalStringFromHexString:array[i]] intValue];// 这个是10进制转换成16进制
}
//直接计算法
unsigned int crc;
crc = do_crc(buff, (int)array.count);
printf("CRC-32/MPEG-2 : %x\n", crc);
/*将CRC校验的高低位对换位置*/
// ret1 = crc >> 8;
// ret1 = ret1 | (crc << 8);
// printf("高低位对换后的值ret: %X\n",crc);
NSString *returnStr = [self addZero:[NSString stringWithFormat:@"%X",crc] withLength:8];
return returnStr;
}
//c语言CRC-32-MPEG-2实现
unsigned int do_crc(unsigned char *ptr, int len)
{
unsigned int i;
unsigned int crc = 0xFFFFFFFF;
while(len--)
{
crc ^= (unsigned int)(*ptr++) << 24;
for (i = 0; i < 8; ++i)
{
if (crc & 0x80000000)
crc = (crc << 1) ^ 0x04C11DB7;
else
crc <<= 1;
}
}
return crc;
}
学习资料
- 开源的组件和库
地址 https://www.cocoacontrols.com
-
Swift
相关第三方资源整合
地址 https://juejin.cn/post/6844903727178989576#heading-15
-
Awesome iOS
最大的特点就是大而全,囊括了从开发、调试到发布App Store
的各种学习资料,也包含了博客、书籍、教程、邮件订阅、播客的推荐。
-
Swift
相关第三方资源整合
地址 https://juejin.cn/post/6844903727178989576#heading-15
工具推荐
SM.MS
将本地图片转换成网络图片的工具,适合在日常纪录笔记时,使用
markdown
显示图片
TinyPNG
一款图片压缩的利器,是无损压缩的哦,笔者在项目开发的过程中,经常使用该工具压缩项目中的资源图片,好用到爆
stream
地址 https://apps.apple.com/cn/app/stream/id1312141691
抓包工具,非常好用,可以查看请求参数,响应结果,以及设置过滤条件过滤抓到的接口,导出响应结果等。
Lookin
Lookin
可以查看与修改iOS App
里的UI
对象,类似于Xcode
自带的UI Inspector
工具,或另一款叫做Reveal
的软件。
但借助于“控制台”和“方法监听”功能,Lookin
还可以进行UI
之外的调试。
此外,虽然Lookin
主体是一款macOS
程序,它亦可嵌入你的iOS App
而单独运行在iPhone
或iPad
上。
最后,Lookin
完全免费。
- 啄幕鸟
地址 https://mp.weixin.qq.com/s/ZLeeI0N00WxUonG-SMJP8A
优酷开源的
iOS
开发提效工具啄幕鸟,抓包、验埋点、视觉走查都很方便,离案也可随时定位问题,可帮助大家提高发现问题的效率。产品、测试、运营、UED
及开发人员皆宜。