小鹏笔记 第一期(持续更新)

1,154 阅读2分钟

开发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;
}

学习资料

  • 开源的组件和库

地址 iosexample.com

地址 www.cocoacontrols.com

  • Swift相关第三方资源整合

地址 juejin.cn/post/684490…

  • Awesome iOS 最大的特点就是大而全,囊括了从开发、调试到发布App Store 的各种学习资料,也包含了博客、书籍、教程、邮件订阅、播客的推荐。

地址 github.com/vsouza/awes…

  • Swift相关第三方资源整合

地址 juejin.cn/post/684490…

工具推荐

  • SM.MS

地址 sm.ms

将本地图片转换成网络图片的工具,适合在日常记录笔记时,使用markdown显示图片

  • TinyPNG

地址 tinypng.com/

一款图片压缩的利器,是无损压缩的哦,笔者在项目开发的过程中,经常使用该工具压缩项目中的资源图片,好用到爆

  • stream

地址 apps.apple.com/cn/app/stre…

抓包工具,非常好用,可以查看请求参数,响应结果,以及设置过滤条件过滤抓到的接口,导出响应结果等。

  • Lookin

地址 lookin.work/

Lookin可以查看与修改iOS App里的 UI 对象,类似于 Xcode 自带的 UI Inspector 工具,或另一款叫做 Reveal 的软件。 但借助于“控制台”和“方法监听”功能,Lookin 还可以进行 UI 之外的调试。 此外,虽然 Lookin 主体是一款 macOS 程序,它亦可嵌入你的 iOS App 而单独运行在 iPhoneiPad 上。 最后,Lookin 完全免费。

  • 啄幕鸟

地址 mp.weixin.qq.com/s/ZLeeI0N00…

优酷开源的 iOS 开发提效工具啄幕鸟,抓包、验埋点、视觉走查都很方便,离案也可随时定位问题,可帮助大家提高发现问题的效率。产品、测试、运营、UED 及开发人员皆宜。