博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第三方库之 - SVProgressHUD
阅读量:5946 次
发布时间:2019-06-19

本文共 2570 字,大约阅读时间需要 8 分钟。

hot3.png

1. 发现两个问题

说是两个问题, 但我不知道算不算是问题, 至少我感觉这影响到了用户体验.

1.1 问题1

我测试时候发现, 当界面正在展示进度条, 这时候弹出了键盘, 进度展示控件会自动上移一段距离, 键盘隐藏, 进度展示会恢复到原来的位置. 但是, 在键盘显示, 进度圈上移之后, 应用程序进入后台, 再回到前台时候, 进度展示圈的位置在上移之前的位置. 如下所示:

分析

当然, 想当然的分析肯定是不行的, 必须去阅读相关的代码才能找到问题所在. 通过查阅源码发现, sv中所有的更改位置的代码都是通过positionHUD:这个方法来实现了, 在弹出键盘隐藏键盘, 应用成为活跃状态等等的通知都走这个方法. 这个方法比较长, 因为作者考虑到了各种应用场景, 各种可能会出现的情况. 此方法的功能实现思路大概是: 算出键盘的高度, 根据键盘高度算出HUD位置, 最后重置HUD位置.

出现如上提出的问题, 肯定是在应用从后台进入前台时候键盘高度没有计算好, 在源码的 Get keyboardHeight in regards to current state 这块代码中, 作者并没有对从后台进入前台时候进行特殊处理, 读取的还是键盘隐藏或者显示出来时候的通知, 如图: QQ20160527-0.png 为了解决这个问题, 我的处理方法就是对从后台进入前台时候进行特殊处理, 主动获取键盘的高度, 并计算出HUD的位置. 如图: QQ20160527-1.png 这样处理之后, 可以完美解决上述问题1. 如果谁有更好的方法或者其他观点, 欢迎留言 !

1.2 问题2

问题2是在测试问题1时候新发现的问题. 问题是这样的, 先弹出键盘, 再用代码弹出一个进度提示, 与, 先弹出进度提示, 然后弹出键盘, sv的位置不同, 第一种方式比第二种方式高了一点(模拟机上没有这个问题, 真机iOS9.2系统会出现这样的问题). 如图所示:

测试发现, 出现这个问题是因为, 通过如下图所示两种方法获取到的键盘高度不一致! 同一个键盘, 相同的状态, 我测试时候高度差了40, 不知道是什么原因. 测试发现, 键盘高度取值如果是 UIKeyboardFrameEndUserInfoKey , 那么两个方法获取键盘高度就一致了. 就这样, 问题解决了. 其实用代码解决问题还是很简单的, 只是修改了两句源码, 但是分析问题, 发现并去解决问题这个过程却并不是这么容易. 如果谁有更好的方法或者其他观点, 欢迎留言.

QQ20160527-2.png

2. 阅读笔记

2.1 懒加载创建view

简单的懒加载倒是没什么好说的, 但是当去造一个轮子时候, 且轮子的样式有很多种, 并且可能随时放生变化时候, 这时候使用如下所示的方法还是比较好的. 以前有自己造一个拥有很多属性可能会变化的轮子, 我的处理方法是, 在需要用到属性的位置去获取, 今天看到这个方法感觉还是懒加载这种方法比较好, 懒加载创建, 其他属性每次需要时候都动态的去获取.

- (SVProgressAnimatedView*)ringView {    if(!_ringView) {        _ringView = [[SVProgressAnimatedView alloc] initWithFrame:CGRectZero];    }        // Update styling    _ringView.strokeColor = self.foregroundColorForStyle;    _ringView.strokeThickness = self.ringThickness;    _ringView.radius = self.statusLabel.text ? self.ringRadius : self.ringNoTextRadius;        return _ringView;}

2.2 图片渲染模式

typedef NS_ENUM(NSInteger, UIImageRenderingMode) {    UIImageRenderingModeAutomatic,          // Use the default rendering mode for the context where the image is used        UIImageRenderingModeAlwaysOriginal,     // Always draw the original image, without treating it as a template    UIImageRenderingModeAlwaysTemplate,     // Always draw the image as a template image, ignoring its color information} NS_ENUM_AVAILABLE_IOS(7_0);

2.3 accessibility属性

事实上, 还没有搞懂这东西怎么用.....

// Accessibility supportself.accessibilityIdentifier = @"SVProgressHUD";self.accessibilityLabel = @"SVProgressHUD";self.isAccessibilityElement = YES;

An identifier can be used to uniquely identify an element in the scripts you write using the UI Automation interfaces. Using an identifier allows you to avoid inappropriately setting or accessing an element’s accessibility label.

3. 后记

这个库在代码学到了一些 , 在程序整体结构上, 没什么东西, 总之还是有收获的.

转载于:https://my.oschina.net/whforever/blog/682964

你可能感兴趣的文章
牛顿法/递归法实现开方的函数功能
查看>>
手势模型和Angular Material的实现
查看>>
Java转换txt文件编码(GBK转UTF-8)
查看>>
Redis-使用记录
查看>>
APICloud 微信授权登录
查看>>
Java Web开发自学笔记一:环境(tomcat、jdk的选择和安装)
查看>>
Cakephp requestAction用法
查看>>
疯狂Activiti6.0连载(13)DMN的XML规范
查看>>
2.Linux上安装MySQL 5.5 rpm
查看>>
网站资源
查看>>
dubbo提供者出现不明外网ip注册的问题
查看>>
Mac版本UltraEdit取消自动更新检查
查看>>
HashMap之Hash碰撞冲突解决方案及未来改进
查看>>
OpenCV3 - 形态转换
查看>>
RTP
查看>>
C#调用java写的WebService
查看>>
常用对照表
查看>>
1046 Shortest Distance
查看>>
富文本编辑器UEditor提交时获取所有上传的文件
查看>>
CI3中添加自己的library,并且使用CI的特性
查看>>