使用 NoticeBoard 迅捷而优雅地发布通知

Android 有原生的 SnackBar ,iOS 没有与之相似的原生控件,GitHub 上好像也没有找到特别好用的开源库。

既然在 Android 平台上能够作为原生控件存在,足以说明这种需求不算太不小众,在 iOS 端,类似的需求可能被 UIAlertController、MBProgressHUD 来替代,但是他们都需要打断用户当前正在进行的事情,体验很不好。GitHub 上有一个开源库 NoticeBar ,模仿 QQ的实现效果 ,虽然有200+的Star,个人感觉 UI 和可定制性都不够理想,于是自己写了一个模仿系统原生通知样式的易于定制的 NoticeBoard,下面请看截图和演示效果:

iOS 开发工程师面试心得

最近找工作已经面试了6家公司,既有初创公司也有上市公司,现利用周末时间总结一下面试被问的频率高的技术问题,本文最近几天会持续更新。

技术点 频率
Runtime机制及其应用 ★★★★★
RunLoop原理及其应用 ★★★★★
多线程技术 ★★★★★
网络技术 ★★★★★
内存管理理解及其应用 ★★★★★
性能优化 ★★★★★
系统架构设计 ★★★★☆
Block ★★★★☆
CoreGraphics、UIBezierPath、CoreAnimation ★★★★☆
数据结构和算法 ★★★★☆
第三方库 ★★★☆☆

其中智能硬件行业的公司会问蓝牙BLE的技术点:数据分包、传输、校验、加密。
另外,AXKit(个人开源库)的简介中的功能的实现思路也是必问的。

整理混乱不堪的各国语言翻译

现状

linksmart项目截止目前已经支持了17个国家的语言,从诞生到现在也已经经历了很多程序员的修改和维护,代码已经变得十分混乱。因为公司一直在接新的定制项目,所以也没有时间进行一次彻底的重构,只能在维护某方面的BUG的时候,对相关代码进行局部重构。现在的情况是:

  • 同一个文本有些语言有翻译,有些语言没有翻译。
  • 有些需要使用缩进的地方,由于某种原因,并没有使用UIEdgeInsets进行缩进,而是在文本前后加空格。(⊙﹏⊙)b

整理思路

首先必须得找出一种合适的方法维护这些Localizable.strings,在Excel里做一个总表,增加语言的时候,可以直接把英文的一列发给客户进行翻译。最大的优势是:随时可以用脚本把Excel里的所有语言导出成项目支持的Localizable.strings文件,极大提高效率。

Objective-C 与 Swift 混编

Demo下载:OCSwiftDemo.zip

Swift调用Objective-C

Swift调用Objective-C文件比较简单。当在Swift工程中新建Objective-C文件或者在Objective-C工程中新建Swift文件时,Xcode会自动提示你是否创建bridging header桥接头文件,点击创建后Xcode会自动为你创建一个桥接头文件。 在基于OC的OCSwiftDemo中创建一个Swift文件或者在Swift项目中创建OC文件时,Xcode会自动创建一个名为SwiftProject-Bridging-Header.h桥接头文件。

iOS 接入 Strava 分享模块(下篇:StravaSDK)

StravaKit 是一个比较新而且代码比较规范的第三方SDK,但是目前还没有上传功能(详见 todo) 。所以我不得已对StravaKit 0.9.5增加上传功能,并进行一些简单封装和改编,使之能够植入到公司项目中。由于时间有限,我只增加了上传fit文件的功能,并且使用了第三方框架Alamofire,所以需要在项目中导入Alamofire

Runtime 简单应用:AXKit手势分类实现原理

手势的应用场景很多,如果你觉得系统给我们提供的方法使用起来并不那么方便,那么本文可能对你有帮助,因为我用block对其进行了封装。

应用场景

  • 场景1:为了调试某个功能,快速给一个视图添加手势,要求轻触的时候执行某段代码。
  • 场景2:tabbar按钮双击刷新列表,要求双击的速度在一秒内,执行某段代码。
  • 场景3:给某个图片添加捏合手势以及旋转手势。
  • ……