MyEyes作为一个视力保健应用,在最初立项之初就定下了检查视力的基本功能。
到底怎么实现这个功能,着实费了一点脑筋。虽然并不是专业的视力检查应用,但也不能做的误差太大,否则就完全失去了这个功能存在的意义。
除此之外,还需要结合手机的操作方式以及特点。
最后总结出了以下思路:
1. 结合手机应用的实际,将常规视力检查一整张对数视力表检查的方式,改为单个视标(也就是E)的逐级检查,使用手机的手势来输入
不过让视标一个一个连续显示,过于单调的画面效果可能会导致用户体验不佳,因此有人提出了以一张标准对数视力表为背景,逐级弹出视标窗口的动画效果
大致效果如下图
实际开发过程中发现,弹出的视标窗口如果使用素材背景,可能导致由于加载背景而使动画效果不明显,处于运行效率考虑,
直接使用代码简单生成了视标窗口
if (targetView) {
targetView.backgroundColor = [UIColor whiteColor];
CALayer *layer = [targetView layer];
[layer setMasksToBounds:YES];
[layer setCornerRadius:10.0f];
[layer setBorderWidth:3.0f];
[layer setBorderColor:[[UIColor greenColor] CGColor]];
}
2. 根据现有同类应用的反馈,搜集常用对数视力表的各个视力等级数据及国内和国际常用等级的换算关系
开发过程中参考了既存同类应用的用户评价,有不少使用者对国内国际两套视力评分等级的换算关系不清楚,因此很多人建议同时给出2中标准的评分。
根据以上反馈,本次应用开发中考虑最好同时给出2种视力标准的评分,以提高用户体验。
查阅相关资料,具体对照可以参照如下链接:
http://www.eye.ac.cn/neweye/Health_Service/careresourse/careresourse2_gb1_8.htm
3. 制作出一个符合标准的视标素材,并根据相关资料,对照标准视标素材,换算出各个视力等级的视标大小
查找到了相关的国家标准,具体参考如下:
http://www.eye.ac.cn/neweye/Health_Service/careresourse/careresourse2_gb1.htm
根据国标的规定视标大小,先将视标素材缩放成为5.0(也就是通常的1.0视力)的标准大小,然后根据如下换算表,算出1个标准距离上
每一级视力的视标大小,再根据手机屏幕密度换算出程序中视标表示的大小。
考虑到检查视力需根据实际使用距离来设定视标的大小,因此将上面计算得出的数据作为标准存在本地DB中,即可根据设定距离换算实际表示大小。
*具体算法冗长,在此不做赘述。