抖音实习周记(二)
status
category
date
summary
slug
icon
tags
password
知识清单
- 《Objective-C基础教程》第12-16章
- Objective-C 属性 property
- Objective-C 类别 category
- iOS UIApplication 与 UIApplicationDelegate
这周干了啥
这周花在看书学习的时间比较少,主要是在看代码,然后做一些简单的工作。因为修改bug和调整代码的工作不太方便记录,就简单记录一下优化的工作。
CollectionView分页滑动
持续天数比较多,也比较苦恼的一个地方,就是关于
CollectionView
的分页滑动问题。使用情景是,一行水平集合有多个Cell
,滑动时中间对齐放大以表示选中。虽然功能是实现了,但是用户体验很不好,主要体现为切换一个Cell
时滑动的距离要求比较远,速度要求也比较高,用最快的速度划过整个屏幕,最多也只能切换2个Cell。我尝试了很多方法,例如通过检测速度动态开关
pagingEnabled
,这样做出现的问题是:根据滑动速度设置这个属性,属性的效果在下一次滑动时才会体现,不影响本次滑动。又尝试修改
decelerationRate
,滑动体验较差的原因是它被设置为UIScrollViewDecelerationRateFast
。我尝试修改其值为UIScrollViewDecelerationRateNormal
时,单页滑动非常顺滑,而且比较容易触发,但快速滑动时,因为减速的加速度较低,所以“制动距离”很远,很长时间没有选中Cell,自然也没有播放Cell中的内容,体验更差了。而且该属性只接受这两个值,虽然他们都只是CGFloat
,但传入其他量并没有效果。在网上看了各种解决方案,最多的是在
scrollViewDidEndDragging
中通过给targetContentOffset
赋值,来修改停止的位置。但自己在实践中发现并没有生效,所以最终选择自定义UICollectionViewFlowLayout
,并在targetContentOffsetForProposedContentOffset
方法中修改返回值targetContentOffset
,最终成功。方法定义:这个方法有两个参数:预期停留位置
proposedContentOffset
和滑动速度velocity
,返回值就是最终停留的位置。首先我们声明一个targetOffset
作为返回值,其值等于proposedContentOffset
,通过velocity
来修改返回值,因为加速度被迫设置为UIScrollViewDecelerationRateFast
,所以可以根据速度计算出需要滑动的距离,把这个值加到返回值上,相当于增加一个辅助滑动距离。然后计算出离它最近的Cell
的位置,并修改返回值来达到类似分页的效果,相当于在滑动结束的时候开启了pagingEnabled
。这种做法有两个难点,第一个是如何根据速度计算出辅助滑动距离,例如一般用户滑动的
velocity
在0.5至6之间,如何设计一个函数把速度上下限映射为辅助距离,需要好好研究。另一个问题就是在Cell
有间隔的情况下,如何计算出每个Cell
对应的offset
,虽然数学上很简单,但就要细心处理。App瘦身删除无用资源
App体积过大之后,需要删除无用资源,因为图片迭代较快,优先考虑删除无用的图片。利用了fengniao和LSUnusedResources来检测无用图片,然后手动全局搜索确定没有调用,再删除图片。在删除大概400kb左右的无用图片之后,尝试运行项目,结果报错资源找不到。
明明全局搜索你了,不是说没有嘛!后来考虑到可能资源名是动态下发的,还在研究更好的解决方案。
总结
本周学习时间较少,基本都在修复bug,因为没什么经验,所以一直在尝试不同的方法,耽误了不少时间。删除无用资源的时候,误删了有用资源,已经删除分支打算从头开始。下周继续,应该先删除一部分,通过commit来分步处理。
虽然解决了几个bug,但是没有怎么学习新知识,心里非常不安,希望下周能多学一点。除此之外,这周还是非常开心的,迎来了双休,拿到了工牌,领到了显示器……下周一定好好学习。
Loading...