抖音实习周记(二)

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体积过大之后,需要删除无用资源,因为图片迭代较快,优先考虑删除无用的图片。利用了fengniaoLSUnusedResources来检测无用图片,然后手动全局搜索确定没有调用,再删除图片。在删除大概400kb左右的无用图片之后,尝试运行项目,结果报错资源找不到。
明明全局搜索你了,不是说没有嘛!后来考虑到可能资源名是动态下发的,还在研究更好的解决方案。

总结

本周学习时间较少,基本都在修复bug,因为没什么经验,所以一直在尝试不同的方法,耽误了不少时间。删除无用资源的时候,误删了有用资源,已经删除分支打算从头开始。下周继续,应该先删除一部分,通过commit来分步处理。
虽然解决了几个bug,但是没有怎么学习新知识,心里非常不安,希望下周能多学一点。除此之外,这周还是非常开心的,迎来了双休,拿到了工牌,领到了显示器……下周一定好好学习。
Loading...

© 刘口子 2018-2025