UIScrollView相关

创建UIScrollView并使其生效

UIScrollView *scrollView = [[UIScrollView alloc]initWithFrame:CGRectMaker(0,0,100,100)];

//注意,一定要设置ContentSize,否则ScrollView无法滚动
scrollView setContentSize:CGSizeMake(200, 200)];

设置内容的位置

[self.scrollView setContentOffset:CGPointMake(200, 200)];

contentSize 是scrollview中的一个属性,它代表scrollview中的可显示区域,假如有一个scrollview,它的frame为(0,0,320,480),而它的contentSize为(320,960).也就是说,这个scrollview整个内容的大小为(320,960),要通过上下滑动scrollview来查看超出(320,480)的内容。

contentOffset 是scrollview当前显示区域顶点相对于frame顶点的偏移量,比如上个例子你拉到最下面,contentoffset就是(0 ,480),也就是y偏移了480

contentInset 是scrollview中contentView.frame.origin与scrollview.frame.origin的关系,比如contentView的frame为(0,30,320,480),那么contentInset则为(0, 30),

设置是否有回弹效果

[self.scrollView setBounces:NO];

设置是否在水平或垂直方向显示滚动条

[self.scrollView setAlwaysBounceVertical:YES];
[self.scrollView setAlwaysBounceHorizontal:NO];

UIScrollViewDelegate常用方法

//当滚动时触发的方法
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    //NSLog(@"%@ contentOffset:%f,%f",scrollView,scrollView.contentOffset.x,scrollView.contentOffset.y);
}

//检测即将开始拖拽
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
    NSLog(@" 即将开始拖拽");
}

//检测即将停止拖拽
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset
{
    NSLog(@"即将停止拖拽");
}

//检测停止拖拽后,是否还有回弹减速运动
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
    NSLog(@"已经停止拖拽,是否在减速:%d",decelerate);
}

//检测完成减速
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    NSLog(@"已经完成减速");
}

UIScrollView的翻页用法

开启翻页模式

//假如读取一组相同尺寸的图片
for(int i = 0; i < IMAGE_NUM; i++)
{
    UIImageView *imageView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:[NSString stringWithFormat:@"Page_0%d",i + 1]]];
    imageView.frame = CGRectMake(i * self.scrollViewWidth, 0, 256, 256);
    imageView.contentMode = UIViewContentModeScaleAspectFill;

    [scrollView addSubview:imageView];
}

//设置scrollView的ContentSize
[scrollView setContentSize:CGSizeMake(IMAGE_NUM * self.scrollViewWidth, 256)];

//开启翻页
[scrollView setPagingEnabled:YES];

添加页码控制器PageControl

//设置页码
[pageControl setNumberOfPages:IMAGE_NUM];

//设置单页不显示
[pageControl setHidesForSinglePage:YES];

//更改点点的图片样式,只能通过KVC方式
[pageControl setValue:[UIImage imageNamed:@"dot"] forKeyPath:@"_currentPageImage"];
[pageControl setValue:[UIImage imageNamed:@"dot1"] forKeyPath:@"_pageImage"];

翻页模式自动滚动

//定时器,每隔单位时间执行方法nextPage
- (void)setAutoScroll:(BOOL) isAuto
{
    if(isAuto)
    {
        //创建定时器
        timer = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(nextPage:) userInfo:nil repeats:YES];
    }
    else
    {
        //取消定时器
        [timer invalidate];
    }
}

- (void)nextPage:(NSTimer*)timer   
{
    int page = (int)scrollView.contentOffset.x / scrollViewWidth;
    page++;
    if(page == 5)
    {
        page = 0;
    }

    //pageControl和scrollView同步
    [pageControl setCurrentPage:page];
    [scrollView setContentOffset:CGPointMake(page * self.scrollViewWidth,0) animated:YES];
}

注意:iOS7以后,导航控制器(UINavigationController)中的UIScrollView顶部会增加额外的滚动区域。如果要去除,只需:

self.automaticallyAdjustsScrollViewInsets = NO;

UIScrollVIew要做自动布局,首先确定scrollView滚动范围

如何在storyboard对scrollView定义滚动范围?

可以添加一个UIView来确定scrollView的滚动范围

如何确定水平和垂直方向:

scrollView 水平是否能滚动:View的宽度 + 左右两边的间距 来确定scrollView的水平滚动范围

scrollView 垂直是否能滚动:View的高度 + 上下两边的间距 来确定scrollView的垂直滚动范围

results matching ""

    No results matching ""