您的位置:首页 > 产品设计 > UI/UE

UIScrollView 边界问题处理

2016-01-18 17:20 477 查看
      在写引导页 或者 教学页的时候 会有scrollview 上放上多张图片,滑动显示下一张的问题 ,当scrollview到最后一张继续往左滑动的时候右边会有白色部分。

这个就是UIScrollView 边界问题。 scrollview 有一个特别重要的属性 bounces 之前用的少,今天发现这个属性是非常重要的。

(1)当bounces属性设置为YES时,当UIScrollView中图片滑动到边界的时候会出现弹动的效果,就像是Linux中的果冻效果一样。
(2)当bounces属性设置为NO时,当UIScrollView中图片滑动到边界时会直接定在边界就不会有弹动的效果。

    我将bounces属性设置为NO,这样就解决了一个bug。就是在滑动到最左端的图片时,再向左滑动就滑动不了,向右滑动也是一样的道理。这样就解决了数组越界所导致的崩溃问题。

#define kNumberOfPages2
#define KDEVICEWIDTH    [[UIScreen mainScreen] bounds].size.width
#define KDEVICEHEIGHT    [[UIScreen mainScreen] bounds].size.height

#import "ViewController.h"

@interfaceViewController ()<UIScrollViewDelegate>
{
    int currentPage;

}
@property (nonatomic,strong)UIScrollView
*scrollView;
@property (nonatomic,strong)UIPageControl
*pageControl;
@property (nonatomic,strong)UIImageView 
*backgroundImgV;
@property (nonatomic,strong)UIImageView 
*backgroundImgV2;
@end

@implementation ViewController

- (void)viewDidLoad {
    [superviewDidLoad];

    _scrollView = [[UIScrollViewalloc]initWithFrame:CGRectMake(0,0,KDEVICEWIDTH,KDEVICEHEIGHT)];
    _scrollView.pagingEnabled =YES;
    _scrollView.clipsToBounds =NO;
    _scrollView.contentSize =CGSizeMake(_scrollView.frame.size.width
* kNumberOfPages, _scrollView.frame.size.height);
    _scrollView.showsHorizontalScrollIndicator =NO;
    _scrollView.showsVerticalScrollIndicator =NO;
    
    /**
     *  注意这里的属性  bounces为yes的时候 scrollview达到边界的时候还是可以拖动会有白色的弹性空白显示出来设置为no的时候到边界的时候就没有拖动了
     */
    _scrollView.bounces =NO;
    
    _scrollView.scrollsToTop =NO;
    _scrollView.delegate =self;
    [_scrollViewsetContentOffset:CGPointMake(0,0)];
    
    [self.viewaddSubview:_scrollView];
    [selfcreateAllEmptyPagesForScrollView:kNumberOfPages];
    
    currentPage =0;
    _pageControl.backgroundColor = [UIColorredColor];//无效不允许修改内部
    _pageControl = [[UIPageControlalloc]initWithFrame:CGRectMake(KDEVICEWIDTH/2,KDEVICEHEIGHT-20,5,5)];
    _pageControl.center =CGPointMake(_scrollView.frame.size.width
/ 2.0, _scrollView.frame.size.height
-15);
    _pageControl.numberOfPages =kNumberOfPages;
    _pageControl.currentPage =0;
    [self.viewaddSubview:_pageControl];
}

-(void)createAllEmptyPagesForScrollView:(int)pages
{
    if (pages<0) {
        return;
    }
    
    
    for (int i =0; i<pages; i++) {
        CGRect sframe =_scrollView.frame;
        UIImageView *imgV = [[UIImageViewalloc]initWithFrame:CGRectMake(sframe.size.width
* i,0 , KDEVICEWIDTH,KDEVICEHEIGHT)];
        NSString *imageName = [NSStringstringWithFormat:@"huanyinye%d",i];
        imgV.image = [UIImageimageNamed:imageName];
        [_scrollViewaddSubview:imgV];
        if (i == pages-1) {
            UIButton *btn = [[UIButtonalloc]initWithFrame:CGRectMake((KDEVICEHEIGHT/2
-60)+KDEVICEWIDTH*i,KDEVICEHEIGHT -60,120,40)];
//            [btn addTarget:self action:@selector(scale_2) forControlEvents:UIControlEventTouchUpInside];
            [_scrollViewaddSubview:btn];
        }
    }
}
#pragma mark ====== delegate

- (void)scrollViewDidScroll:(UIScrollView *)sender {
    CGFloat pageWidth =self.scrollView.frame.size.width;
    int page =floor((self.scrollView.contentOffset.x
- pageWidth / 2) / pageWidth) +
1;
    if (page <0 || page >=kNumberOfPages) {
        return;
    }
    _pageControl.currentPage = page;
    
}

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
}

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
    CGFloat pageWidth =self.scrollView.frame.size.width;
    int page =floor((self.scrollView.contentOffset.x
- pageWidth / 2) / pageWidth) +
1;
    _pageControl.currentPage = page;
    currentPage = page;
}

- (void)didReceiveMemoryWarning {
    [superdidReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  uiscrollview bounces