美文网首页
广告轮播

广告轮播

作者: 3a169b0787bc | 来源:发表于2016-07-29 17:44 被阅读36次

    这个功能很普遍,应该很多时候首页的广告展示都会用到。但是我们由于业务关系,工作中我也没遇到过,恰好看到一个iOS的公众号推送了一个就看了看,其实原理很简单。就是三个imageView在轮播过程中一直更新imageView展示的image,同时不断重新设置imageView展示的image。知道了这个就没有什么,然后对scrollView的代理方法的合理应用就可以了。

    首先来明确一下几个代理方法的调用情况.其实看方法名就很容易辨别。

    当scrollView开始被拖拽的时候调用
    - (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView
    当scrollView被拖拽的动作即将结束时
    - (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset
    当scrollView被拖拽结束
    - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
    当scrollView拖拽动作结束开始减速。注意是结束之后。也是会在scrollViewDidEndDragging之后才会被调用。但是这个方法也不一定会被调用。比如当设置pagingEnabled为NO的时候,在拖拽结束的时候就有可能不会被调用。
    - (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView
    scrollView减速结束后。
    - (void) scrollViewDidEndDecelerating:(UIScrollView *)scrollView
    另外还有一个和这个流程无关的代理方法。通过方法名就可以知道这个代理方法并不是在人为拖拽的时候调用,当代码设置contentOffset的时候会调用它
    - (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
    这个不用说了,只要scrollView动了就会调用它
    - (void) scrollViewDidScroll:(UIScrollView *)scrollView
    为什么要把这几个方法列出来呢? 因为我自己写的时候就在这上面栽了跟头。在已经知道原理的情况下,就只剩在scrollview代理方法里重新设置image和contentOffset了。
    轮播有两种情况,一个是自动轮播,另外一个是人为拖拽进行了干扰。自动轮播没什么好说的。人为拖拽的时候,如果你将判断拖拽方向和距离然后进行重新设置image和contentOffset的操作放在scrollViewDidEndDragging就可能会出现问题,因为此时拖拽的整个动作对scrollView的影响实际是并未结束,就是你滑动手势结束之后,但是scrollView还可能在减速滑动。所有你写了代码做了操作之后,它还会继续滑动,但是这部分滑动并不会掉scrollViewDidEndDragging然后就可能出现位置偏差。所有我觉得正确捕捉拖拽的动作进行合理的判断的话,应该以scrollViewWillBeginDragging为开始。
    - (void) scrollViewDidEndDecelerating:(UIScrollView *)scrollView为结束。

    写完发现好像和轮播没什么关系,尽在记scrollview的代理方法了。。。不过搞清楚了scrollview的代理方法调用时机,然后明白轮播的原理然后自己去实现就应该没什么问题了吧。
    最后附上源码,这是我看的那个Demo,我自己写的也是看了他之后才写的,所有还是给这个吧。想看的朋友自己看看吧,很简单的小功能。
    http://code.cocoachina.com/view/131888

    相关文章

      网友评论

          本文标题:广告轮播

          本文链接:https://www.haomeiwen.com/subject/mzuzjttx.html