笔记8-27(自定义UIScrollView,添加手势识别,UIPageControl使用)

本文介绍如何通过自定义UIScrollView实现分页效果,包括模仿UITableView的协议、添加点击手势识别及利用UIPageControl指示当前页。

1,实现分页效果。

需要自定义UIScrollView,并模仿UITableView里的协议:UITableViewDataSource,UITableViewDelegate。定义两个协议MyScrollViewDelegate,MyScrollViewDataSource,要知道一共有多少页,每一页长什么样。

再根据滚动的偏移量计算出当前页是第几页。

2,添加点击手势识别

//添加点击手势识别,否则点击图片没反应

        UITapGestureRecognizer *tap = [[UITapGestureRecognizeralloc]initWithTarget:selfaction:@selector(didTap:)];

        [selfaddGestureRecognizer:tap];

3,UIScrollView的两个重要的协议

#pragma mark - UIScrollViewDelegate
//scrollView已经完成拖动手指离开,图片继续向后减速滚动,decelerate为1。该函数在这个时机调用
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
    if (!decelerate) {
        if (_delegate && [_delegate respondsToSelector:@selector(scrollViewDidEndScroll:)]) {
            [_delegate scrollViewDidEndScroll:self];
        }
    }
}

//scrollView已经完成减速停止时,系统自动调用
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    //判断_delegate所指向的对象非空,并且协议里可选的方法已经实现
    if (_delegate && [_delegate respondsToSelector:@selector(scrollViewDidEndScroll:)]) {
        [_delegate scrollViewDidEndScroll:self];
    }
}
4,对于协议里面可选的方法在使用时要进行判断

if (_delegate && [_delegate respondsToSelector:@selector(scrollViewDidEndScroll:)])
5,

UIScrollView 里面重要的属性

@property(nonatomic)CGPoint contentOffset; // default CGPointZero

@property(nonatomic)CGSize contentSize;   // default CGSizeZero 内容的大小,决定了它能否滚动


//计算当前页

- (NSInteger)currentPage

{

    return_scrollView.contentOffset.x /_scrollView.frame.size.width;

}

//设置当前页:还是要将其转化为偏移量contentOffset的多少

- (void)setCurrentPage:(NSInteger)currentPage

{

   _scrollView.contentOffset =CGPointMake(_scrollView.frame.size.width * currentPage,0);

   _currentPage = currentPage;

}


6,UIPageControl的使用。用来指示滚动页面的当前页。有两个重要的属性numberOfPages(一共多少页)和currentPage(当前页)

pageControl = [[UIPageControlalloc]initWithFrame:CGRectMake(0, height - tipHeight - pageHeight, rect.size.width, pageHeight)];

//    //只在调试模式使用,得到真实数据后注释掉

//#ifdef DEBUG

//    pageControl.numberOfPages = 8;

//#endif



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值