天天看点

用UIScrollView和UIPageControl简单模拟相册功能

用一个大的UIScrollView里放一些小的UIScrollView,小的UIScrollView里面放UIImageView来显示图片,切换图片的时候通过UIPageControl来显示的图片的位置,通过切换页也可以切换图片

1.UIScrollView

用到的属性
@property(nonatomic)        CGPoint                      contentOffset;                 // default CGPointZero  偏移
@property(nonatomic)        CGSize                       contentSize;                   // default CGSizeZero    可以滚动的区域
@property(nonatomic)        BOOL                         bounces;                       // default YES. if YES, bounces past edge of content and back again  到边缘之后是否可以拖动
@property(nonatomic,assign)id<UIScrollViewDelegate>      delegate;                      // default nil. weak reference   协议代理
用到的代理方法
- (void)scrollViewDidScroll:(UIScrollView *)scrollView;                                              // any offset changes 滚动发生
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView;    // return a view that will be scaled. if delegate returns nil, nothing happens 得到正在放大的视图

2,UIPageControl

用到的属性
@property(nonatomic)NSInteger numberOfPages;         // default is 0 页数
@property(nonatomic)NSInteger currentPage;           // default is 0. value pinned to 0..numberOfPages-1 当前页

3.简单实现

.h中添加两个属性或成员
{
    UIScrollView *_scrollView;
    UIPageControl *_pageControl;
}
.m中
- (void)viewDidLoad
{
    [superviewDidLoad];
// Do any additional setup after loading the view.
    _scrollView=[[UIScrollViewalloc]initWithFrame:CGRectMake(0,20,320,180)];
    [_scrollViewsetBackgroundColor:[UIColorgrayColor]];
    [_scrollViewsetMaximumZoomScale:4.0f];//放大比例
    [_scrollViewsetMinimumZoomScale:0.1f];//缩小比例
    [_scrollViewsetShowsVerticalScrollIndicator:false];//隐藏滑动指示器
    [_scrollViewsetBounces:NO];//到边缘之后是否可以持续拉动的效果
    [_scrollViewsetContentSize:CGSizeMake(2880   ,0)];//大小
    _scrollView.delegate=self;//设置代理人
    [_scrollViewsetPagingEnabled:YES];//每次拖动,总是拖到新一页
    [_scrollViewsetContentOffset:CGPointMake(640,0)];
    //添加图片
    for (int i=1; i<10; i++) {
        UIScrollView *scrollView=[[UIScrollViewalloc]initWithFrame:CGRectMake(i*320-320,0,320, 180)];
        //创建子滚动视图
        NSString *str=[NSStringstringWithFormat:@"%d.jpg",i];
        UIImageView *imageView=[[UIImageViewalloc]initWithImage:[UIImageimageNamed:str]];
        //创建imageView添加到子滚动视图
        [imageView setFrame:CGRectMake(0,0,320, 180)];
        [scrollView addSubview:imageView];
        [imageView release];
        scrollView.delegate=self;//给子滚动视图添加代理
        [scrollView setMaximumZoomScale:1.5f];
        [scrollView setMinimumZoomScale:0.1f];
        [_scrollView addSubview:scrollView];//子滚动视图添加到大的滚动视图上面
        [scrollView release];
    }
    //添加页控制
    _pageControl=[[UIPageControlalloc]initWithFrame:CGRectMake(0,240,320,40 )];
    [_pageControlsetBackgroundColor:[UIColorgrayColor]];
    [_pageControladdTarget:selfaction:@selector(pageControlAction:)forControlEvents:UIControlEventValueChanged];
    [_pageControlsetNumberOfPages:9];
    [_pageControlsetPageIndicatorTintColor:[UIColorredColor]];
    [self.viewaddSubview:_pageControl];
    [_pageControl release];
    [self.viewaddSubview:_scrollView];
    [_scrollView release];
}
//得到当前要放大的视图
-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
    NSArray *viewArr=[scrollView subviews];//得到子视图
    return    [viewArr objectAtIndex:0];
}
//页切换动作,换到下一张图片
-(void)pageControlAction:(id)sender
{
    if ([sender isKindOfClass:[UIPageControlclass]]) {
        UIPageControl *pagecontrol=(UIPageControl *)sender;
        NSLog(@"%d",pagecontrol.currentPage);
        //每次切换到下一张的时候,让它显示原来的比例
        UIScrollView *scrollView=[[_scrollViewsubviews]objectAtIndex:pagecontrol.currentPage];
        [scrollView setZoomScale:1.0];
        [_scrollView setContentOffset:CGPointMake(320*pagecontrol.currentPage,0 )];
    }
}
//滚动动作发生
-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    NSLog(@"滚动发生");
    NSLog(@"content offset=%@",NSStringFromCGPoint(scrollView.contentOffset));
    int page=scrollView.contentOffset.x/320;
    [_pageControlsetCurrentPage:page];
    NSLog(@"page=%d",page);
}
效果图
用UIScrollView和UIPageControl简单模拟相册功能