zoukankan      html  css  js  c++  java
  • UI基于UIScrollView实现图片组手动轮换和自动轮播

    #import "RootViewController.h"
    
    @interface RootViewController (){
    
        UIPageControl * _pageControl;
      
        NSTimer * _timer;
        
        UIScrollView * scrV;
        
        UILabel * label;
    }
    
    @end
    
    @implementation RootViewController
    
    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
    {
        self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
        if (self) {
            // Custom initialization
        }
    return self; } - (void)viewDidLoad { [super viewDidLoad]; [self creatScrollView]; [self creatPageController]; [self addTimer]; // Do any additional setup after loading the view. }
    //加入定时器,在定时器方法中执行换页操作,用于实现自动轮播
    -(void)addTimer{ _timer=[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(toNextPage) userInfo:nil repeats:YES]; } -(void)toNextPage{ NSInteger page= _pageControl.currentPage; //此处以下使用的判断方法,都是基于界面的转换,将最后面补充的第一张图片用第一张图片顶掉,造成视觉的误差,偷梁换柱if (page==0) { scrV.contentOffset=CGPointMake(0, 0); } page++; CGFloat X=page*self.view.frame.size.width; [UIView animateWithDuration:1 animations:^{ scrV.contentOffset=CGPointMake(X, 0); }]; if(page==8){ page=0; } _pageControl.currentPage=page; label.text=[NSString stringWithFormat:@"%d/8",page+1]; }
    //定义页面控件,使得页面控件跟随图片转换
    -(void)creatPageController{ _pageControl =[[UIPageControl alloc]initWithFrame:CGRectMake(0, 400, 320, 40)]; _pageControl.backgroundColor=[UIColor blackColor];
    //页面控件透明度 _pageControl.alpha
    =0.5;
    //定义页面控件显示白点的个数,实际图片为9张,最后一张与第一张一致,因为只实现从左往右,只需在最后添加一张。如需从右往左,即可在第一张前补充一张为最后一张即可,改变初始偏移量就可以实现多个方向转换 _pageControl.numberOfPages
    =8;
    //虽然实际图片为9张或者10张,但真正要展览的图片只有8张,所以page的页码仍为8,开始展览的第一张一定为0; _pageControl.currentPage
    =0; [self.view addSubview:_pageControl]; //定义页码,此处不写无关 label=[[UILabel alloc]initWithFrame:CGRectMake(270, 460, 50, 20)]; label.text=@"1/8"; label.backgroundColor=[UIColor cyanColor]; label.textAlignment=NSTextAlignmentCenter; [self.view addSubview:label]; }
    //1⃣️初始化scrollView,加载图片,我使用的动漫00.jpg--动漫08.jpg,所以可以循环创建
    -(void)creatScrollView{ //定义与屏幕大小等高等宽的scrollView scrV=[[UIScrollView alloc]initWithFrame:self.view.bounds]; //加载图片 for(int i = 0; i < 9; i++){ UIImageView * imageV=[[UIImageView alloc]initWithFrame:CGRectMake(self.view.frame.size.width*i, 0, 320,self.view.frame.size.height)]; [imageV setImage:[UIImage imageNamed:[NSString stringWithFormat:@"动漫%02d.jpg",i+1]]]; [scrV addSubview:imageV]; } //定义scrollView的属性 scrV.contentSize=CGSizeMake(self.view.frame.size.width*9, 0);
    //定义初始偏移量 如果第一张前面加了最后一张,那就把初始改为320,0; scrV.contentOffset
    =CGPointMake(0, 0); //按页面跳转
    scrV.pagingEnabled
    =YES;
    scrV.showsVerticalScrollIndicator
    =NO;
    //设置代理 scrV.
    delegate=self; [self.view addSubview:scrV]; } #pragma mark **UIScrollViewDelegate** //在减速结束的方法里,判断页面位置,使页面控件跟随图片变换 此处用于手动轮换。 -(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{ NSLog(@"减速"); NSInteger page=scrV.contentOffset.x/320; if(page==8){ scrollView.contentOffset=CGPointMake(0, 0); page=0; } _pageControl.currentPage=page; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end

    UIScrollView滚动条控件   大多应用于手机软件中的图片展览

  • 相关阅读:
    c++ cout、cin、endl
    c++ namespace
    找到小镇的法官
    整数反转
    c++stack类的用法
    栈应用:最小栈(第二题)
    栈的压入、弹出序列(第一题)
    c++中vector类的用法
    Android 面试常问七道题
    传感器实现仿微信摇一摇功能
  • 原文地址:https://www.cnblogs.com/Sweet-Magic/p/4688078.html
Copyright © 2011-2022 走看看