UIScroView 3倍的contentSize,左右Scroll时,懒惰加载View

UIScroView 3倍的contentSize,左右Scroll时,懒惰添加左右的View

用途:分段加载数据

定义枚举:

typedefenum {

    ViewPositionLeft = 101,

    ViewPositionCenter,

    ViewPositionRight

} ViewPosition;

变量定义:

    NSInteger _currnetPage;

    CGRect _leftFrame;

    CGRect _centerFrame;

    CGRect _rightFrame;

    UIScrollView *_sv;

初始化变量:

-(void)createView

{

 

    _currnetPage = 0;

    

    _sv = [[UIScrollView alloc] init];

    _sv.frame = CGRectMake(0, 0, 320, 424);

    _sv.pagingEnabled = YES;

    _sv.backgroundColor = [UIColorwhiteColor];

    _sv.contentSize = CGSizeMake(_sv.frame.size.width*3, _sv.frame.size.height);

    

    _sv.showsHorizontalScrollIndicator = YES;

    _sv.showsVerticalScrollIndicator = NO;

 

    

    for (int i = 2; i > -1; i--) {

        CGRect frame;

        frame.origin.x = _sv.frame.size.width * (2 - i);

        frame.origin.y = 0;

        frame.size = _sv.frame.size;

        

        UIView *lbl = [selfcreateLabeViewWithCurrentPage:i];

        lbl.frame = frame;

        

        if (i == 2) {

            _leftFrame = frame;

            lbl.tag = ViewPositionLeft;

            

        }

        if (i == 1) {

            _centerFrame = frame;

            lbl.tag = ViewPositionCenter;

        }

        if (i == 0) {

            _rightFrame = frame;

            lbl.tag = ViewPositionRight;

        }

        

        

        [_sv addSubview:lbl];

        

        

    }

    _sv.delegate = self;            

    

    [_svscrollRectToVisible:_rightFrameanimated:NO];

    

    [self.view addSubview:_sv];

}

创建新View的方法(selfcreateLabeViewWithCurrentPage):

- (UIView *)createLabeViewWithCurrentPage:(int)Page

{

    

    UILabel *textView = [[UILabel alloc] init];

    textView.text = [NSString stringWithFormat:@"Page %d",Page];

    textView.font = [UIFont systemFontOfSize:38];

    textView.textColor = [UIColor blackColor];

    textView.backgroundColor = [UIColorwhiteColor];

    textView.textAlignment = UITextAlignmentCenter;

 

    [_sv addSubview:textView];

    return textView;

}

UIScrollViewDelegate方法:

- (void)scrollViewDidEndDecelerating:(UIScrollView *)sv

{

    

    

    BOOL towardsToLeft = NO;

    CGFloat width = _sv.frame.size.width;

    

    if (_sv.contentOffset.x == width) {

        if (_currnetPage == 0) {

            _currnetPage++;

        }

        

        return;

    }

    if (_sv.contentOffset.x > width) {

        towardsToLeft = YES;

        if(_currnetPage == 0){

//            NSLog(@"currentPage = 0;  向左");

            return;

        }

//        NSLog(@"向左");

    }

    else{

//        NSLog(@"向右");

    }

    

    

//    _previousPage = _currnetPage;

    if (towardsToLeft == YES) {

        _currnetPage--;

    }

    else{

        _currnetPage++;

    }

    

    

    if (_currnetPage == 0) {

        

        

    }

    else  {

        [sv scrollRectToVisible:_centerFrameanimated:NO];

        UIView *view = [_sv viewWithTag:_currnetPage];

        view.frame = _centerFrame;

        

        if (towardsToLeft == YES) {

            UIView *viewRLeft = [_sv viewWithTag:ViewPositionLeft];

            [viewRLeft removeFromSuperview];

            

            UIView *viewRCenter = [_sv viewWithTag:ViewPositionCenter];

            viewRCenter.frame = _leftFrame;

            viewRCenter.tag = ViewPositionLeft;

            

            UIView *viewRRight = [_sv viewWithTag:ViewPositionRight];

            viewRRight.frame = _centerFrame;

            viewRRight.tag = ViewPositionCenter;

            

            UIView *viewRight = [self createLabeViewWithCurrentPage:_currnetPage - 1];

            viewRight.frame = _rightFrame;

            viewRight.tag = ViewPositionRight;

            [sv addSubview:viewRight];

        }

        else{

            UIView *viewRRight = [_sv viewWithTag:ViewPositionRight];

            [viewRRight removeFromSuperview];

            

            UIView *viewRCenter = [_sv viewWithTag:ViewPositionCenter];

            viewRCenter.frame = _rightFrame;

            viewRCenter.tag = ViewPositionRight;

            

            UIView *viewRLeft = [_sv viewWithTag:ViewPositionLeft];

            viewRLeft.frame = _centerFrame;

            viewRLeft.tag = ViewPositionCenter;

            

            UIView *viewLeft = [self createLabeViewWithCurrentPage:_currnetPage + 1];

            viewLeft.frame = _leftFrame;

            viewLeft.tag = ViewPositionLeft;

            [sv addSubview:viewLeft];

            

            

            

        }

    }

 

}

 

 希望对用到的朋友有用。

NOI-001—《C++编程及竞赛训练》 NOI-002—《普及组竞赛强化训练课程》 NOI-003—《初级算法课程》
原文地址:https://www.cnblogs.com/fphuang/p/3594322.html