• iOS之UIScrollView循环滚动


      1 #import "ViewController.h"
      2 
      3  
      4 
      5 #define SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width
      6 
      7 #define SCREEN_HEIGHT [UIScreen mainScreen].bounds.size.height
      8 
      9 #define IMAGEVIEW_COUNT 3
     10 
     11  
     12 
     13 @interface ViewController () <UIScrollViewDelegate> {
     14 
     15     UIScrollView *_scrollView;
     16 
     17     UIImageView *_leftImageView;
     18 
     19     UIImageView *_centerImageView;
     20 
     21     UIImageView *_rightImageView;
     22 
     23     UIPageControl *_pageControl;
     24 
     25     UILabel *_label;
     26 
     27     NSMutableDictionary *_imageData;//图片数据
     28 
     29     int _currentImageIndex;//当前图片索引
     30 
     31     int _imageCount;//图片总数
     32 
     33 }
     34 
     35  
     36 
     37 @end
     38 
     39  
     40 
     41 @implementation ViewController
     42 
     43  
     44 
     45 - (void)viewDidLoad {
     46 
     47     [super viewDidLoad];
     48 
     49     //加载数据
     50 
     51     [self loadImageData];
     52 
     53     //添加滚动控件
     54 
     55     [self addScrollView];
     56 
     57     //添加图片控件
     58 
     59     [self addImageViews];
     60 
     61     //添加分页控件
     62 
     63     [self addPageControl];
     64 
     65     //添加图片信息描述控件
     66 
     67     [self addLabel];
     68 
     69     //加载默认图片
     70 
     71     [self setDefaultImage];
     72 
     73 }
     74 
     75 #pragma mark 加载图片数据
     76 
     77 -(void)loadImageData {
     78 
     79     //读取程序包路径中的资源文件
     80 
     81     NSString *path = [[NSBundle mainBundle] pathForResource:@"imageInfo" ofType:@"plist"];
     82 
     83     _imageData = [NSMutableDictionary dictionaryWithContentsOfFile:path];
     84 
     85     _imageCount = (int)_imageData.count;
     86 
     87 }
     88 
     89  
     90 
     91 #pragma mark 添加控件
     92 
     93 -(void)addScrollView {
     94 
     95 //    _scrollView = [[UIScrollView alloc] initWithFrame:[UIScreen mainScreen].bounds];
     96 
     97     _scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 20+20, SCREEN_WIDTH, 200)];
     98 
     99     _scrollView.backgroundColor = [UIColor lightGrayColor];
    100 
    101     //设置代理
    102 
    103     _scrollView.delegate = self;
    104 
    105     //设置滚动范围
    106 
    107     _scrollView.contentSize = CGSizeMake(IMAGEVIEW_COUNT*SCREEN_WIDTH, 0);
    108 
    109     //设置当前显示的位置为中间图片(设置scrollView偏移量)
    110 
    111     [_scrollView setContentOffset:CGPointMake(SCREEN_WIDTH, 0)];
    112 
    113     //设置分页
    114 
    115     _scrollView.pagingEnabled = YES;
    116 
    117     //隐藏水平条 竖向条
    118 
    119     _scrollView.showsHorizontalScrollIndicator = NO;
    120 
    121     _scrollView.showsVerticalScrollIndicator = NO;
    122 
    123     //关闭弹簧效果
    124 
    125 //    _scrollView.bounces = NO;
    126 
    127     [self.view addSubview:_scrollView];
    128 
    129 }
    130 
    131  
    132 
    133 #pragma mark 添加图片三个控件
    134 
    135 -(void)addImageViews {
    136 
    137     _leftImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, _scrollView.frame.size.height)];
    138 
    139     //会保证图片比例不变,而且全部显示在ImageView中,这意味着ImageView会有部分空白
    140 
    141     _leftImageView.contentMode=UIViewContentModeScaleAspectFit;
    142 
    143     [_scrollView addSubview:_leftImageView];
    144 
    145     
    146 
    147     _centerImageView = [[UIImageView alloc] initWithFrame:CGRectMake(SCREEN_WIDTH, 0, SCREEN_WIDTH, _scrollView.frame.size.height)];
    148 
    149     _centerImageView.contentMode = UIViewContentModeScaleAspectFit;
    150 
    151     [_scrollView addSubview:_centerImageView];
    152 
    153     
    154 
    155     _rightImageView = [[UIImageView alloc] initWithFrame:CGRectMake(2*SCREEN_WIDTH, 0, SCREEN_WIDTH, _scrollView.frame.size.height)];
    156 
    157     _rightImageView.contentMode = UIViewContentModeScaleAspectFit;
    158 
    159     [_scrollView addSubview:_rightImageView];
    160 
    161 }
    162 
    163 #pragma mark 设置默认显示图片
    164 
    165 -(void)setDefaultImage {
    166 
    167     //加载默认图片
    168 
    169     _leftImageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"%i.jpeg",_imageCount-1]];
    170 
    171     _centerImageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"%i.jpeg",0]];
    172 
    173     _rightImageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"%i.jpeg",1]];
    174 
    175     _currentImageIndex = 0;
    176 
    177     //设置当前页
    178 
    179     _pageControl.currentPage = _currentImageIndex;
    180 
    181     NSString *imageName = [NSString stringWithFormat:@"%i.jpeg",_currentImageIndex];
    182 
    183     _label.text = _imageData[imageName];
    184 
    185 }
    186 
    187  
    188 
    189 #pragma mark 添加分页控件
    190 
    191 -(void)addPageControl {
    192 
    193     _pageControl = [[UIPageControl alloc] init];
    194 
    195 //    _pageControl.backgroundColor = [UIColor orangeColor];
    196 
    197     //注意此方法可以根据页数返回UIPageControl合适的大小
    198 
    199     CGSize size = [_pageControl sizeForNumberOfPages:_imageCount];
    200 
    201     _pageControl.bounds = CGRectMake(0, 0, size.width, size.height);
    202 
    203     _pageControl.center = CGPointMake(SCREEN_WIDTH*2/3, _scrollView.frame.origin.y+_scrollView.frame.size.height-10);
    204 
    205     //设置颜色
    206 
    207     _pageControl.pageIndicatorTintColor = [UIColor colorWithRed:193/255.0 green:219/255.0 blue:249/255.0 alpha:1];
    208 
    209     //设置当前页颜色
    210 
    211     _pageControl.currentPageIndicatorTintColor = [UIColor colorWithRed:0 green:150/255.0 blue:1 alpha:1];
    212 
    213     //设置总页数
    214 
    215     _pageControl.numberOfPages = _imageCount;
    216 
    217     [self.view addSubview:_pageControl];
    218 
    219 }
    220 
    221  
    222 
    223 #pragma mark 添加信息描述控件
    224 
    225 -(void)addLabel {
    226 
    227     _label = [[UILabel alloc] initWithFrame:CGRectMake(0, 20, SCREEN_WIDTH, 20)];
    228 
    229 //    _label.backgroundColor = [UIColor orangeColor];
    230 
    231     _label.textAlignment = NSTextAlignmentCenter;
    232 
    233     _label.textColor = [UIColor colorWithRed:0 green:150/255.0 blue:1 alpha:1];
    234 
    235     [self.view addSubview:_label];
    236 
    237 }
    238 
    239  
    240 
    241 #pragma mark 滚动停止事件
    242 
    243 -(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
    244 
    245     //重新加载图片
    246 
    247     [self reloadImage];
    248 
    249     //移动到中间
    250 
    251     [_scrollView setContentOffset:CGPointMake(SCREEN_WIDTH, 0)];
    252 
    253     //设置分页
    254 
    255     _pageControl.currentPage = _currentImageIndex;
    256 
    257     //设置描述
    258 
    259     NSString *imageName = [NSString stringWithFormat:@"%i.jpeg",_currentImageIndex];
    260 
    261     _label.text = _imageData[imageName];
    262 
    263 }
    264 
    265  
    266 
    267 #pragma mark 重新加载图片
    268 
    269 -(void)reloadImage {
    270 
    271     int leftImageIndex,rightImageIndex;
    272 
    273     CGPoint offset = [_scrollView contentOffset];
    274 
    275     if (offset.x > SCREEN_WIDTH) { //向右滑动
    276 
    277         _currentImageIndex = (_currentImageIndex+1)%_imageCount;
    278 
    279     }else if(offset.x < SCREEN_WIDTH) { //向左滑动
    280 
    281         _currentImageIndex = (_currentImageIndex+_imageCount-1)%_imageCount;
    282 
    283     }
    284 
    285     _centerImageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"%i.jpeg",_currentImageIndex]];
    286 
    287     
    288 
    289     //重新设置左右图片
    290 
    291     leftImageIndex = (_currentImageIndex+_imageCount-1)%_imageCount;
    292 
    293     rightImageIndex = (_currentImageIndex+1)%_imageCount;
    294 
    295     _leftImageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"%i.jpeg",leftImageIndex]];
    296 
    297     _rightImageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"%i.jpeg",rightImageIndex]];
    298 
    299 }
    300 
    301 @end
    302 
    303  
  • 相关阅读:
    工作中Linux常用命令
    自动化测试
    Firefox/Chrome WebDriver浏览器驱动
    Appium
    Python+selenium进行浏览器的连接ChromeOptions
    文件及异常捕获处理
    面向对象练习题
    python函数&面向对象
    python基础
    python8道练习题
  • 原文地址:https://www.cnblogs.com/rglmuselily/p/5216850.html
Copyright © 2020-2023  润新知