UIPageControl与UIScrollView的联合使用

当做自己的学习笔记,如果对您有帮助,那太好啦,大哭误导了您也请多见谅,有错误的地方请大家指正!

其实两者并没有什么联系,可以自己主动连接。

首先介绍一下 UIPageControl

pageControl 点的个数通过numberOfPage来设置,但是我们发现,无论给pageControl设置多少的大小,pageContro的显示还是根据点数来的。
如:
pageControl = [[UIPageControl alloc]initWithFrame:CGRectMake(150, 159, 0, 0)];
pageControl.numberOfPages = 4;
这样创建出来的pageContro还是会显示四个点,但是!!!这些点是不能点的,也就是不能切换,因为pageControl自己的大小都没有。

其实pageControl是有大小的,给它设置一个背景颜色,可以发现pageControl设置的大小区域是有颜色的。
   <span style="white-space:pre">	</span> pageControl = [[UIPageControl alloc]initWithFrame:CGRectMake(150, 667-20, 75, 20)];
   <span style="white-space:pre">	</span> pageControl.backgroundColor = [UIColor blackColor];
pageControl的中 亮着的小圆点为currentPage,表示当前页面。一般默认是停在第0页(哪怕它真的是第一页,程序员都是从0开始的 闭嘴)。
UIPageControl的父类是UIControl,这个东西跟UIButton是兄弟。既然跟button是兄弟,那肯定也能添加事件啦,这里主要用到的事件是: UIControlEventValueChanged。

UIScrollView 的介绍

UIScrollView 是一个视图,可以通过滑动手势来显示更多的内容。视图都要有CGRect,就是它本身的大小和坐标。它还有一个很重要的属性 contentsize,是UIScrollView里的内容。pageEnabled(BOOL类型),默认为NO,如果要分页设置为YES。
    UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)];//创建一个200 * 200 的scrollView
    scrollView.contentSize = CGSizeMake(500, 500);//它的内容 是500 * 500,(如果是200 * 500,只能上下滑动,如果是500 * 200 ,只能左右滑动,如果是200 * 200 别划动了!)
    scrollView.pagingEnabled = YES;//是否分页?是! 分页的标准是按照 scrollView的大小分的,会整页显示。如这里是页面大小是 200 * 200,内容是500 * 500,那就是两页半,半这个东西很反人类,所有以后尽量设置整数页,最后半页因为填不满一个scrollView,会向它之前的那页借一半!
//    再添加一个视图,如UIImageView
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 500, 500)];
    [scrollView addSubview:imageView];

还有一个重要的属性是contentOffset 即内容的偏移量,是一个CGPoint类型,有X方向的偏移量,Y方向的偏移量, 这里指的都是与(0,0)之间偏移量,而不是与上一个位置之间的偏移量!

当然它还有很多基本的属性,什么隐藏滚动条啊,滚动条颜色,这里不过多介绍了,主要介绍如何连接UIScrollView和UIPageControl。


注意pageControl不能作为scrollView的子视图,两者要处于同级。
看一下下面一个简单的例程

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(100, 100, 200, 200)];//初始化scorllView
    scrollView.contentSize = CGSizeMake(400, 200);//设置内容大小
    scrollView.pagingEnabled = YES;//我要分页!这里分了2页。
    scrollView.delegate = self;//设置代理,后面的方法,包括 开始拖动是调用的,手指离开屏幕是调用,开始减速时调用等等,这里我用了减速停止时调用。这部分可以扩展很多,有兴趣的可以多研究研究。
    [self.view addSubview:scrollView];
//    为了使我们的程序加直观,我们需要两个群众演员~
    UILabel *label1 = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 200, 200)];
    label1.backgroundColor = [UIColor redColor];
    label1.text = @"我是第一页";
    UILabel *label2 = [[UILabel alloc] initWithFrame:CGRectMake(200, 0, 200, 200)];
    label2.backgroundColor = [UIColor greenColor];
    label2.text = @"我是第二页";
    [scrollView addSubview:label1];
    [scrollView addSubview:label2];//演员已就位!
    
    pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(100+80, 100+180, 40, 20)];//初始化pageControl,这个坐标和大小根据它将要出现的位置来设定
    pageControl.numberOfPages = 2;//页数为2
    [pageControl addTarget:self action:@selector(PageChanged:) forControlEvents:UIControlEventValueChanged];//添加动作,即改变currentPage时的事件。
    [self.view addSubview:pageControl];//pageControl也是添加在self.view上,与scroolView同级!!
    
    
}
- (void)PageChanged:(id)sender {//即改变currentPage时的事件。
    [UIView beginAnimations:nil context:nil];//设置一个动作,否则看起来是瞬间移动的o(╯□╰)o
    [UIView setAnimationDuration:.5];//持续0.5秒
    [scrollView setContentOffset:CGPointMake(pageControl.currentPage * 200, 0)];//设置偏移量,偏移量改变相对于scroll里的内容移动了。因为要移动整页,所有用pageControl.current*200来设置。
    [UIView commitAnimations];//提交动作
}

#pragma mark -delegate 
//UIScrollView 的代理方法:当内容移动减速停止后调用此方法
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView1 {
//    减速停止后内容肯定不会再有偏移,此时停留在哪一页就是哪一页。
    pageControl.currentPage = scrollView.contentOffset.x/200;//设置currentPage的值,根据偏移量除以200,即可得到
}

那么到这里我们就可以用pageControl的小圆点来控制页面的切换了,也可以通过滑动scrollView来改变小圆点的位置,建立起了练习!







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值