zoukankan      html  css  js  c++  java
  • UIScrollView的基本使用

      UIScrollView可以用于显示多于一个屏幕的内容,超出屏幕范围的内容可以通过滑动进行查看,附上轮播图的传送门http://www.cnblogs.com/shensq/p/5152954.html。

      我们来试着做一个简单的,首先我们可以用宏定义来保存屏幕的高度跟宽度。

    // 定义保存屏幕宽度和高度的宏
    #define kWidth self.view.frame.size.width
    #define kHeight self.view.frame.size.height

      接下来,就到了创建,跟设置了。

     

        UIScrollView *scrollView = [[UIScrollView alloc]    initWithFrame:CGRectMake(0, 0, kWidth, kHeight)];
        
        // 设置滚动视图的相关属性
        // 1、滚动区域,内容区域的大小
        // 如果想要实现滚动操作,有三种情况
        /**
            1、内容视图(滚动区域)的宽度大于滚动视图的宽
            2、内容视图(滚动区域)的高大于滚动视图的高
            3、内容视图(滚动区域)的宽和高都大于滚动视图的宽和高
         */
        
        /**
         *  如果想实现股东视图的缩放功能,必须指定缩放的视图以及缩放的比例
         *  指定所发那个视图需要实现代理方法,指定缩放比例,是为滚动设置缩放比例
         */
        
    //    scrollView.minimumZoomScale = 0.5; // 最小缩放比例
    //    scrollView.maximumZoomScale = 2.0; // 最大缩放比例
        
        scrollView.contentSize = CGSizeMake(7 * kWidth, kHeight);
        
        // 滚动视图偏移量
        scrollView.contentOffset = CGPointMake(0, 0);
        
        // 整页滚动
        scrollView.pagingEnabled = YES;
        
        // 关闭横向显示条
        scrollView.showsHorizontalScrollIndicator = NO;
    
        // 关闭滚动视图的回弹效果(默认是开启的)
        scrollView.bounces = NO;
        
        // 设置滚动视图的代理
        scrollView.delegate = self;
        
        // for循环创建七个UIImageView并且添加到滚动视图上面
        for (int i = 0; i < 7; i++) {
            // 先创建小scrollView
            UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, kWidth, kHeight)];
            imageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"%d.jpg", i]];
            
            UIScrollView *scroll = [[UIScrollView alloc] initWithFrame:CGRectMake(i * kWidth, 0, kWidth, kHeight)];
            scroll.delegate = self;
            scroll.minimumZoomScale = 0.5; // 最小缩放比例
            scroll.maximumZoomScale = 2.0; // 最大缩放比例
            
            [scroll addSubview:imageView];
                 
            [scrollView addSubview:scroll];
             }
        [self.view addSubview:scrollView];

      如果只用一个UIScrollView来存放所以的图片,那么图片的放大缩小会使UIScrollView不能正常的滚动,所以我们需要先用一个小的UIScrollView来存放图片,然后再把小的UISrollVIew放到大的里面,这样的话,放大缩小图片对大的UIScrollView没有影响了。

      我们还需要给UIScrollView添加代理,这样才能完成后续的工作。 <UIScrollViewDelegate>。

      

    // 滚动过程中触发的方法
    - (void)scrollViewDidScroll:(UIScrollView *)scrollView {
        NSLog(@"正在滚动");
    //    CGFloat scrollX = scrollView.center.x;
    //    CGFloat scrollY = scrollView.center.y;
    //    
    //    scrollX = scrollView.contentSize.width > scrollView.frame.size.width ? scrollView.contentSize.width / 2 : scrollX;
    //    
    //    scrollY = scrollView.contentSize.height > scrollView.frame.size.height ? scrollView.contentSize.height / 2 : scrollY;
    //    
    //    UIImageView *image = [scrollView.subviews firstObject];
    //    
    //    image.center = CGPointMake(scrollX, scrollY);
    }
    
    // 即将开始拖拽的方法,吃屎桂东视图即将加速
    - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
        NSLog(@"即将进行拖拽");
    }
    
    // 结束拖拽的方法,不再加速
    - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
        NSLog(@"拖拽结束");
    }
    
    // 即将开始减速
    - (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView {
        NSLog(@"即将开始减速");
    }
    
    // 结束减速,也就是停止滚动
    - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
        NSLog(@"结束滚动");
        
        // 先从负责滚动的⼤scrollView找到他的⼦视图
        for (UIScrollView *sView in scrollView.subviews){
            // 在根据⼦类的对象类型进⾏判断
            if ([sView isKindOfClass:[UIScrollView class]]){
                // 把视图的尺⼨恢复到原有尺⼨
                sView.zoomScale = 1.0;
            }
        }
    }

      上面便是比较常用的代理方法。接下来就是缩放的方法。

    // 指定缩放视图
    - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
        return [scrollView.subviews firstObject];
    }
    
    - (void)scrollViewDidZoom:(UIScrollView *)scrollView {
        UIImageView *imageView = [scrollView.subviews firstObject];
        
        if (scrollView.zoomScale <= 1.0) {
            imageView.center = CGPointMake(kWidth / 2, kHeight / 2);
        }
    }

      这样就完成了一个比较简单的小东西。

  • 相关阅读:
    Eclipse智能提示及快捷键
    Activity生命周期
    【highlight.js】页面代码高亮插件
    【Flask】 flask-socketio实现WebSocket
    【treeview】 基于jQuery的简单树形插件
    【Zabbix】大规模监控误报发生时的处理方案
    【Java】 重拾Java入门
    【Flask】 网站的用户管理
    【Flask】 结合wtforms的文件上传表单
    【Python】 Web开发框架的基本概念与开发的准备工作
  • 原文地址:https://www.cnblogs.com/shensq/p/5207140.html
Copyright © 2011-2022 走看看