IOS--UIPageControl使用

[html]  view plain copy
  1. #import <UIKit/UIKit.h>  
  2.   
  3. @interface ViewController : UIViewController<UIScrollViewDelegate>  
  4. {  
  5.     UIScrollView* helpScrView;  
  6.     UIPageControl* pageCtrl;  
  7. }  
  8. @end  
[html]  view plain copy
  1. #import "ViewController.h"  
  2.   
  3. @interface ViewController ()  
  4.   
  5. @end  
  6.   
  7. @implementation ViewController  
  8.   
  9. - (void)viewDidLoad  
  10. {  
  11.     [super viewDidLoad];  
  12.     CGRect bounds = self.view.frame;  //获取界面区域  
  13.       
  14.     //加载蒙板图片,限于篇幅,这里仅显示一张图片的加载方法  
  15.     UIImageView* imageView1 = [[[UIImageView alloc] initWithFrame:CGRectMake(0, bounds.origin.y, bounds.size.width, bounds.size.height)] autorelease];  //创建UIImageView,位置大小与主界面一样。  
  16.     [imageView1 setImage:[UIImage imageNamed:@"bg.png"]];  //加载图片help01.png到imageView1中。  
  17.     //imageView1.alpha = 0.5f;  //将透明度设为50%。  
  18.     UIImageView* imageView2 = [[[UIImageView alloc] initWithFrame:CGRectMake(1*bounds.size.width, bounds.origin.y, bounds.size.width, bounds.size.height)] autorelease];  //创建UIImageView,位置大小与主界面一样。  
  19.     [imageView2 setImage:[UIImage imageNamed:@"bg.png"]];  
  20.     //继续加载图片  
  21.     //。。。。  
  22.       
  23.     //创建UIScrollView  
  24.     helpScrView = [[UIScrollView alloc] initWithFrame:CGRectMake(bounds.origin.x, bounds.origin.y, bounds.size.width, 300)];  //创建UIScrollView,位置大小与主界面一样。  
  25.     [helpScrView setContentSize:CGSizeMake(bounds.size.width * 6, 300)];  //设置全部内容的尺寸,这里帮助图片是3张,所以宽度设为界面宽度*3,高度和界面一致。  
  26.     helpScrView.pagingEnabled = YES;  //设为YES时,会按页滑动  
  27.     helpScrView.bounces = NO; //取消UIScrollView的弹性属性,这个可以按个人喜好来定  
  28.     [helpScrView setDelegate:self];//UIScrollView的delegate函数在本类中定义  
  29.     helpScrView.showsHorizontalScrollIndicator = NO;  //因为我们使用UIPageControl表示页面进度,所以取消UIScrollView自己的进度条。  
  30.     [helpScrView addSubview:imageView2];  
  31.     [helpScrView addSubview:imageView1];//将UIImageView添加到UIScrollView中。  
  32.     [self.view addSubview:helpScrView]; //将UIScrollView添加到主界面上。  
  33.       
  34.     //创建UIPageControl  
  35.     pageCtrl = [[UIPageControl alloc] initWithFrame:CGRectMake(0, 400, bounds.size.width, 30)];  //创建UIPageControl,位置在屏幕最下方。  
  36.     pageCtrl.numberOfPages = 6;//总的图片页数  
  37.     pageCtrl.currentPage = 0; //当前页  
  38.     [pageCtrl addTarget:self action:@selector(pageTurn:) forControlEvents:UIControlEventValueChanged];  //用户点击UIPageControl的响应函数  
  39.     [self.view addSubview:pageCtrl];  //将UIPageControl添加到主界面上。  
  40. }  
  41.   
  42. //其次是UIScrollViewDelegate的scrollViewDidEndDecelerating函数,用户滑动页面停下后调用该函数。  
  43.   
  44.   //contentView改变时调用

    #pragma mark - UIScrollViewDelegate

    -(void)scrollViewDidScroll:(UIScrollView *)scrollView{

        CGFloat scrollViewW = scrollView.frame.size.width;

        CGFloat x = scrollView.contentOffset.x;

        //int page = x/scrollViewW;

        int page = (x + scrollViewW/2)/scrollViewW;

        _pageControl.currentPage = page;

    }

    //滑动停止时调用
  45. - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView  
  46. {  
  47.     //更新UIPageControl的当前页  
  48.     CGPoint offset = scrollView.contentOffset;  
  49.     CGRect bounds = scrollView.frame;  
  50.     [pageCtrl setCurrentPage:offset.x / bounds.size.width];  
  51.     NSLog(@"%f",offset.x / bounds.size.width);  
  52. }  
  53.   
  54. //然后是点击UIPageControl时的响应函数pageTurn  
  55.   
  56.   
  57. - (void)pageTurn:(UIPageControl*)sender  
  58. {  
  59.     //令UIScrollView做出相应的滑动显示  
  60.     CGSize viewSize = helpScrView.frame.size;  
  61.     CGRect rect = CGRectMake(sender.currentPage * viewSize.width, 0, viewSize.width, viewSize.height);  
  62.     [helpScrView scrollRectToVisible:rect animated:YES];  
  63. }  
  64. - (void)didReceiveMemoryWarning  
  65. {  
  66.     [super didReceiveMemoryWarning];  
  67.     // Dispose of any resources that can be recreated.  
  68. }  
  69.   
  70. @end  

修改PageControl d的小点点的图标

重写类!!

[html]  view plain copy
  1. //  
  2. //  GrayPageControl.h  
  3. //  iPlayer  
  4. //  
  5. //  Created by 屎壳郎情调 on 13-9-11.  
  6. //  Copyright (c) 2013年 ibokan. All rights reserved.  
  7. //  
  8.   
  9. #import <UIKit/UIKit.h>  
  10.   
  11. @interface GrayPageControl : UIPageControl  
  12. {  
  13.     UIImage* activeImage;  
  14.     UIImage* inactiveImage;  
  15. }  
  16. @end  

[html]  view plain copy
  1. //  
  2. //  GrayPageControl.m  
  3. //  iPlayer  
  4. //  
  5. //  Created by 屎壳郎情调 on 13-9-11.  
  6. //  Copyright (c) 2013年 ibokan. All rights reserved.  
  7. //  
  8.   
  9. #import "GrayPageControl.h"  
  10.   
  11. @implementation GrayPageControl  
  12.   
  13. -(id) initWithFrame:(CGRect)frame  
  14. {  
  15.     self = [super initWithFrame:frame];  
  16.       
  17.     activeImage = [UIImage imageNamed:@"appleDot@2x"];  
  18.     inactiveImage = [UIImage imageNamed:@"pageDot@2x"] ;  
  19.       
  20.     return self;  
  21. }  
  22.   
  23. -(void) updateDots  
  24. {  
  25.     for (int i = 0; i < [self.subviews count]; i++)  
  26.     {  
  27.         UIImageView* dot = [self.subviews objectAtIndex:i];  
  28.         if (i == self.currentPage) dot.image = activeImage;  
  29.         else dot.image = inactiveImage;  
  30.     }  
  31. }  
  32.   
  33. -(void) setCurrentPage:(NSInteger)page  
  34. {  
  35.     [super setCurrentPage:page];  
  36.     //修改图标大小  
  37.     for (NSUInteger subviewIndex = 0; subviewIndex < [self.subviews count]; subviewIndex++) {  
  38.           
  39.         UIImageView* subview = [self.subviews objectAtIndex:subviewIndex];  
  40.           
  41.         CGSize size;  
  42.           
  43.         size.height = 10;  
  44.           
  45.         size.width = 10;  
  46.           
  47.         [subview setFrame:CGRectMake(subview.frame.origin.x, subview.frame.origin.y,  
  48.                                        
  49.                                      size.width,size.height)];  
  50.           
  51.     }  
  52.   
  53.       
  54.     [self updateDots];  
  55. }  
  56.   
  57. /*  
  58. // Only override drawRect: if you perform custom drawing.  
  59. // An empty implementation adversely affects performance during animation.  
  60. - (void)drawRect:(CGRect)rect  
  61. {  
  62.     // Drawing code  
  63. }  
  64. */  
  65.   
  66. @end  


这个函数会在scrollview停止滑动的时候执行,通常是先把某个UIScrollView的delegate设置为某个类,然后在这个类里写

-(void) scrollViewDidEndDecelerating:(UIScrollView *)scrollView{

//在这里修改scrollView的内容或者其他什么东西

}

但是这样并不能保证scrollview在停下来的过程中一定会执行这个函数:

当scrollview滑动快结束的时候再点击scrollview里的内容的话(或者直接拖拽到滑动应该停止的位置的话),scrollview会停下来并回到应该滑动停止的位置,这样松手了以后不会再继续滑动,而在这个过程中因为scrollview的滑动不是“自然停止”的而是“手动停止”所以scrollViewDidEndDecelerating这个函数就不会被执行。


解决方法:

如果需要scrollview在停止滑动后一定要执行某段代码的话应该搭配scrollViewDidEndDragging函数使用,

-(void) scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{

if (!decelerate){

//这里写上停止时要执行的代码

}

}

当然,如果仅仅是需要在停止拖拽后执行某段代码或是不关心滑动过程的话,只用scrollViewDidEndDragging就够了


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本Demo使用UICollectionView实现自动无限轮播功能。 主要功能: 1.实现自动轮播,可修改轮播的时间 2.轮播图片可以来自本地,也可来自网络,通过单独的方法进行设置即可。对于加载网络图片时,Demo中使用了YYWebImage,也可自行替换成SDWebImage。 3.重写了和系统UIPageControl一样的功能,可用图片代替PageControl上的点点,也可自定义其颜色以及切换动画。 使用方法:使用方法比较简单。 /** * 加载本地图片Banner */ - (void)setupLocalBannerImageView { NSArray *array = @[@"1.png", @"2.png", @"3.png", @"4.png", @"5.png"]; FFBannerView *bannerVew = [FFBannerView bannerViewWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 200) locationImageArray:array]; bannerVew.timeInterval = 2.0; [self.view addSubview:bannerVew]; } /** * 加载网络图片Banner */ - (void)setupNetWorkBannerImageView { NSArray *array = @[@"http://i3.download.fd.pchome.net/t_960x600/g1/M00/07/09/oYYBAFMv8q2IQHunACi90oB0OHIAABbUQAAXO4AKL3q706.jpg", @"http://images.weiphone.net/attachments/photo/Day_120308/118871_91f6133116504086ed1b82e0eb951.jpg", @"http://benyouhuifile.it168.com/forum/macos/attachments/month_1104/110425215921926a173e0f728e.jpg", @"http://benyouhuifile.it168.com/forum/macos/attachments/month_1104/1104241737046031b3a754f783.jpg"]; FFBannerView *bannerVew = [FFBannerView bannerViewWithFrame:CGRectMake(0, 250, [UIScreen mainScreen].bounds.size.width, 200) netWorkImageArray:array placeHolderImage:nil]; bannerVew.timeInterval = 2.0; bannerVew.pageControlStyle = FFPageControlStyleMiddle; bannerVew.delegate = self; [self.view addSubview:bannerVew]; } 以上方式即可简单使用,如需自定义PageControl也可继承FFAbstractDotView,做些基本的设置即可。 gitHub下载地址:喜欢的朋友请给个星呗! 欢迎各位一起来讨论,有问题请发邮箱270452746@qq.com或者直接加我QQ:270452746进行讨论。谢谢!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值