网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

pageControl页码实时更新的实现-创新互联

    iOS开发过程中会经常遇到scrollView与pageControl混合使用的情况。scrollView与pageControl的配合逻辑代码一般是写在以下代理函数中的:

创新互联公司成立于2013年,是专业互联网技术服务公司,拥有项目成都网站设计、做网站网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元东兴做网站,已为上家服务,为东兴各地企业和个人服务,联系电话:18982081108
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView

即在scrollView滚动结束时pageControl才会更新代码,这样可以防止pageControl页码的逻辑混乱。但这同样会出现一个问题,那就是在用户快速滑动scrollView的时候,pageControl的页码无法更新,在用户看来就是scrollVIew在滑动,而页码无变化。其实解决的方法很简单,原理就是将pageControl的页码更新放到以下代理函数中即可:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView

这个函数会在scrollView滑动过程中不断被调用,将pageControl的页码更新操作放在这个函数里执行即可获得页码实时更新的效果。代码如下:

//scrollView滑动结束时调用
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
    if(_p_w_picpathScrollView.contentOffset.x >= (totalPage-1.5)*_p_w_picpathScrollView.width){
        [_p_w_picpathScrollView setContentOffset:CGPointMake(_p_w_picpathScrollView.width, 0) animated:NO];
    }else if(_p_w_picpathScrollView.contentOffset.x<0.5*_p_w_picpathScrollView.width){
        [_p_w_picpathScrollView setContentOffset:CGPointMake((totalPage-2)*_p_w_picpathScrollView.width, 0) animated:NO];
    }
    NSInteger currentPage = roundf((_p_w_picpathScrollView.contentOffset.x-_p_w_picpathScrollView.width) / [self getWidth]);
    _pageControl.currentPage = currentPage;
}


//scrollView滑动过程中多次调用
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
    NSInteger currentPage;
    if(_p_w_picpathScrollView.contentOffset.x >= (totalPage-1.5)*_p_w_picpathScrollView.width) {
        currentPage = roundf((_p_w_picpathScrollView.contentOffset.x-_p_w_picpathScrollView.width) / [self getWidth]) - (totalPage-2);
    }else if(_p_w_picpathScrollView.contentOffset.x<0.5*_p_w_picpathScrollView.width){
        // 设置当前页
        currentPage = roundf((_p_w_picpathScrollView.contentOffset.x-_p_w_picpathScrollView.width) / [self getWidth]) + (totalPage-2);
    }else{
        currentPage = roundf((_p_w_picpathScrollView.contentOffset.x -_p_w_picpathScrollView.width) / [self getWidth]);
    }
    _pageControl.currentPage = currentPage;
}

需要说明的几点:

1、这个scrollView是根据需求“banner需要能够循环滑动”而设置的,原理如下:

(1)有三个主要的数据view,分别为view1,view2,view3,这三个是真正要显示的数据view。为了实现“循环效果”,另外定义了两个辅助view(view1_fz和view3_fz),在scrollView中的排列顺序如下图所示:

pageControl页码实时更新的实现

(2)在右滑至View1_fz的位置时,通过setContentOffset将_p_w_picpathScrollView移到View1的位置,并关闭动画效果。在左滑至View3_fz的位置时,通过setContentOffset将_p_w_picpathScrollView移到View3的位置,并关闭动画效果。

这样就实现了循环的效果。

2、这里的totalPage指的是所有的view个数,包括辅助的view,即totalPage=5。

3、通过contentOffset的值计算当前页码currentPage。

4、这里的“翻页”是以view的一半宽度为标准的,即scrollView翻页超过了下一页的一半时currentPage显示为下一页。

5、为了实现pageControl的实时更新效果,在scrollViewDidScroll中对currentPage实时进行计算。

6、为了防止页码的错误,在scrollViewDidEndDecelerating函数中依然保留一次对currentPage的最终计算。

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


当前名称:pageControl页码实时更新的实现-创新互联
本文地址:http://bjjierui.cn/article/hceoe.html

其他资讯