最近来新项目,要做类似新浪那样的,问了下亮哥,亮哥给发了一个demo,做的挺不错的特别是上面的导航,我基本都是在demo的基础上改了下满足了公司的要求,问安卓开发的他们说有第三方,今天闲着没事自己试着进一步的封装了下,同时把源放在了github上,方便以后要做的朋https://github.com/ywcui/ViewPagerndicator
这里不贴源码了,记录下自己遇到的问题。
问题1:由于在底部滑动时会执行UIScrollViewDelegate代理中的scrollViewDidScroll方法,而我在方法里面让导航栏滑动了, 但在执行导航栏滑动的代码中执行了代理barSelectedIndexChanged;在实现这个代理中我又将下面的滑动的方法执行了这样就造成了循环,这个问题当时试了几次,中午吃饭的时候都在想,想着要让一个不执行对方滑动的方法,回来后试了下是可以的,在执行导航栏滚动的方法加了一个参数做为标记值,若flag=No则执行代理否则不执行这样就能解决了
问题2.在点击导航栏中的按钮时从左向右滑动时,在滑动开始的按钮上有来回晃动一下的效果,动画感觉不太爽,这个问题找了好久,没想到石头设置了下Bottom中的setShowPageWithIndex方法的
参数animated为NO就可以了,这也能体现出找bug的能力自己还是有待提高。动画问题首先应该找动画的地方,而我把这个就忽略了,这个值得思考。
问题3.用滚动条放导航按钮,按钮多时,可能有的会隐藏,怎么让它点屏幕边上的按钮时自动的滑出几个按钮,这样就放方便不用用户用手滑了。
这个我也是看亮哥的demo,首先要知道ScrollView它的contentOffset.x是为0, 这样找到点击按钮的frame,根据点中按钮的frame的x坐标和ScrollView的contentOffset.x做比较, 当大于一定值(屏幕右侧的量)时,根据点击按钮的索引和按钮数组,让ScrollView滚动到点击按钮右边的按钮的位置,这样就能向右自动滑动,同理向左滑动时,滚动到点击按钮左边的按钮的位置。具体看github上YZPTopScrollView中的-(void)selectIndex:(int)index withFlag:(BOOL)flag。
效果图: