zoukankan      html  css  js  c++  java
  • 利用UIScrollView实现几个页面的切换

    此实例可以了解一下UIScrollView的运用,以及表格跟页面跳转的内容;

    原作者地址:http://www.cocoachina.com/bbs/read.php?tid=323514

    效果图如下:

    1:知识点滚动视图的运用

    #import "YCView.h"
    
    @interface ViewController ()<UIScrollViewDelegate>
    @property (nonatomic, strong)UIScrollView *scrollV;
    @property (weak, nonatomic) IBOutlet UIButton *usesbtn;
    @property (weak, nonatomic) IBOutlet UIButton *partBtn;
    @property (weak, nonatomic) IBOutlet UIButton *serverBtn;
    
    @end
    
    @implementation ViewController
    //懒加载
    - (UIScrollView *)scrollV
    {
        if(!_scrollV)
        {
            _scrollV = [[UIScrollView alloc] init];
            //设置scrollView的frame
            CGFloat scrollX = 0;
            CGFloat scrollY = 110;
            CGFloat scrollW = CGRectGetWidth(self.view.bounds);
            CGFloat scrollH = CGRectGetHeight(self.view.bounds);
            _scrollV.frame = CGRectMake(scrollX, scrollY, scrollW, scrollH);
            //设置代理
            _scrollV.delegate = self;
            //将scrollView添加到控制器的view上
            [self.view addSubview:_scrollV];
            
        }
        return _scrollV;
    }
    - (void)viewDidLoad {
        [super viewDidLoad];
        //添加视图 view
        [self addScrollView];
        self.scrollV.contentOffset = CGPointMake(0, 0);
    }
    
    - (void)addScrollView
    {
        //添加3个view
        for(int i = 0; i < 3; i++)
        {
           CGFloat viewX = i * [UIScreen mainScreen].bounds.size.width;
           CGFloat viewY = 0;
           CGFloat viewW = [UIScreen mainScreen].bounds.size.width;
           CGFloat viewH = [UIScreen mainScreen].bounds.size.height - 108;
            YCView *v = [[YCView alloc] initWithFrame:CGRectMake(viewX, viewY, viewW, viewH)];
            v.backgroundColor = [UIColor colorWithRed:arc4random_uniform(255)/ 255.0 green:arc4random_uniform(255)/ 255.0 blue:arc4random_uniform(255)/ 255.0 alpha:1.0];
            [self.scrollV addSubview:v];
        }
        //设置frame,偏移量
        //设置分页
        self.scrollV.pagingEnabled = YES;
        self.scrollV.backgroundColor = [UIColor orangeColor];
        //设置滚动范围
        self.scrollV.contentSize = CGSizeMake([UIScreen mainScreen].bounds.size.width * 3, [UIScreen mainScreen].bounds.size.height);
        //设置偏移量
        self.scrollV.contentOffset = CGPointMake([UIScreen mainScreen].bounds.size.width, 0);
        //取消scrollView滚动到边缘的弹簧效果
        self.scrollV.bounces = NO;
        //隐藏水平滚动条
        self.scrollV.showsHorizontalScrollIndicator = NO;
    }
    
    
    #pragma mark --UIScrollViewDelegate
    - (void)scrollViewDidScroll:(UIScrollView *)scrollView{
        //设置按钮被选中状态下的颜色
        scrollView.contentOffset.x == 0 ? [self.usesbtn setTitleColor:[UIColor orangeColor] forState:UIControlStateNormal] : [self.usesbtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
        scrollView.contentOffset.x == ([UIScreen mainScreen].bounds.size.width) ? [self.partBtn setTitleColor:[UIColor orangeColor] forState:UIControlStateNormal] : [self.partBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
        scrollView.contentOffset.x == ([UIScreen mainScreen].bounds.size.width) * 2 ? [self.serverBtn setTitleColor:[UIColor orangeColor] forState:UIControlStateNormal] : [self.serverBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
    }
    
    #pragma mark --btnClick
    - (IBAction)usesBtnClick:(id)sender {
        //跳转到第1个view  contentOffset.x = 屏幕的宽度 * 0
        //重置scrollView的位置
        [UIView animateWithDuration:0.5 animations:^{
            self.scrollV.contentOffset = [self ScrollViewWithContentOffSetPage:0];
        }];
    }
    
    - (IBAction)partBtnClick:(id)sender {
        //跳转到第2个view  contentOffset.x = 屏幕的宽度 * 1
        //重置scrollView的位置
        [UIView animateWithDuration:0.5 animations:^{
            self.scrollV.contentOffset = [self ScrollViewWithContentOffSetPage:1];
        }];
        
    }
    
    - (IBAction)serverBtnClick:(id)sender {
        //跳转到第3个view  contentOffset.x = 屏幕的宽度 * 2
        //重置scrollView的位置
        [UIView animateWithDuration:0.5 animations:^{
            self.scrollV.contentOffset = [self ScrollViewWithContentOffSetPage:2];
        }];
    }
    
    //返回scrollView偏移量
    - (CGPoint)ScrollViewWithContentOffSetPage:(NSInteger)page{
        return CGPointMake(([UIScreen mainScreen].bounds.size.width) * page, 0);
    }
    
    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    @end

    2:列表及跳转跳显示的内容

    #import "YCView.h"
    #import "YCCellView.h"
    
    static NSString *idenifer = @"YCCollectionViewCell";
    #define CellWeigth ([UIScreen mainScreen].bounds.size.width)/3.0
    #define CellHeigth 44
    @interface YCView ()<UITableViewDataSource, UITableViewDelegate>
    @property (strong, nonatomic)NSArray *parts;
    @property (strong, nonatomic)NSMutableArray *Views;
    @end
    
    @implementation YCView
    //懒加载
    - (NSMutableArray *)Views{
        if(!_Views){
            _Views = [NSMutableArray array];
        }
        return _Views;
    }
    //懒加载
    - (NSArray *)parts{
        if(!_parts)
        {
            _parts = [NSArray array];
            _parts = @[@"热门推荐", @"汽车外饰", @"香水/净化", @"功能用品", @"美容养护", @"安全/防护", @"影音导航"];
        }
        return _parts;
    }
    
    - (instancetype)init
    {
        if(self = [super init])
        {
            [self addView];
        }
        return self;
    }
    - (instancetype)initWithFrame:(CGRect)frame
    {
        if(self = [super initWithFrame:frame])
        {
             [self addView];
        }
        return self;
    }
    - (void)addView
    {
        //添加tableView
        UITableView *tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, -44, CellWeigth, [UIScreen mainScreen].bounds.size.height) style:UITableViewStyleGrouped];
        tableView.backgroundColor = [UIColor redColor];
        tableView.dataSource = self;
        tableView.delegate = self;
        [self addSubview:tableView];
    }
    #pragma mark --UITableViewDataSource
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
        return self.parts.count;
    }
    
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
        static NSString *ID = @"YCCell";
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
        if(cell == nil)
        {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
        }
        cell.textLabel.text = self.parts[indexPath.row];
        return cell;
    }
    
    #pragma mark --UITableViewDelegate
    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
        [self addBestView];
    }
    
    - (void)addBestView{
        YCCellView *view = [[YCCellView alloc] initWithFrame:CGRectMake(CellWeigth, 0, ([UIScreen mainScreen].bounds.size.width)-CellWeigth, [UIScreen mainScreen].bounds.size.height)];
        view.backgroundColor = [UIColor redColor];
        [[self.Views lastObject] removeFromSuperview];
        [self.Views addObject:view];
        [self addSubview:view];
    }
    
    
    
    - (void)layoutSubviews
    {
        [super layoutSubviews];
    }
    
    @end

    3:单元列的内容

    #import "YCCellView.h"
    
    #define ViewMagin 10
    #define ViewHeight 90
    #define ViewWeight (([UIScreen mainScreen].bounds.size.width)-CellWeigth - 3*ViewMagin)/3.0
    #define CellWeigth ([UIScreen mainScreen].bounds.size.width)/3.0
    @interface YCCellView ()
    @end
    @implementation YCCellView
    - (instancetype)init
    {
        if(self = [super init])
        {
            [self addCollectionView];
        }
        return self;
    }
    
    - (instancetype)initWithFrame:(CGRect)frame
    {
        if(self = [super initWithFrame:frame])
        {
            [self addCollectionView];
        }
        return self;
    }
    
    
    
    - (void)addCollectionView
    {
        for(int i = 0; i < 4; i++)
        {
            for(int j = 0; j < 3; j++)
            {
                UIView *v = [[UIView alloc] initWithFrame:CGRectMake(j * (ViewWeight + ViewMagin), i * (ViewHeight + ViewMagin), ViewWeight, ViewHeight)];
                v.backgroundColor = [UIColor colorWithRed:arc4random_uniform(255)/ 255.0 green:arc4random_uniform(255)/ 255.0 blue:arc4random_uniform(255)/ 255.0 alpha:1.0];
                [self addSubview:v];
            }
        }
    }
    
    
    
    @end
  • 相关阅读:
    Apollo与ROS
    QT windeployqt
    自定义QGraphicsItem
    ROS与C++
    aptitude与apt-get
    解决tcp粘包问题
    网络中两台主机通信
    I/O多路复用之select、poll、epoll
    Nginx命令行控制
    C++11
  • 原文地址:https://www.cnblogs.com/wujy/p/4808383.html
Copyright © 2011-2022 走看看