精华内容
参与话题
问答
  • iOS图片轮播

    2018-06-20 17:28:03
    闲着没事儿,写了个iOS图片轮播,源码地址singmiya github,希望对你有所启发,如果觉得好玩的话记得star哦! 效果 demo支持如下功能 无限轮播 可自定义展示样式 自定义底部视图和Page Control样式 无限轮播 这...

    闲着没事儿,写了个iOS图片轮播,源码地址singmiya github,希望对你有所启发,如果觉得好玩的话记得star哦!

    效果

    demo支持如下功能

    1. 无限轮播
    2. 可自定义展示样式
    3. 自定义底部视图和Page Control样式

    无限轮播

    这个算是一个取巧,原理:把scroll view的contentSize的宽度设置的足够大,初始contentOffset的x设置为1/2 * width,这样足够保证在应用激活期间可以产生无限轮播的效果。

    自定义展示样式

    可以子类化ViewpagerViewCell类,自定义自己想要的样式。给自己的样式一个个性的名称放入到下面的枚举对象中。

    typedef NS_ENUM(NSInteger, ViewpagerViewStyle) {
        ViewpagerViewStyleDefault
    };
    复制代码

    然后在ViewPagerView初始化方法中的switch语句中加入相应的分支。

    switch (_view_style) {
        case ViewpagerViewStyleDefault:
            _current_view_class = [ViewpagerViewCell class];
            break;
        default:
            _current_view_class = [ViewpagerViewCell class];
            break;
    }
    复制代码

    这样自定义样式就完成了。

    自定义底部视图和Page Control样式

    目前Page Control支持位置(左、中、右),形状(圆形、矩形),设置颜色。

    typedef NS_ENUM(NSInteger, BottomViewStyle) {
        // 底部视图样式 0b1111100000 == 0x03e0
        BottomViewStyleDefault                      = 0 << 5,
        
        // page control样式 ob111110000000000 == 0x7c00
        BottomViewStylePageControlSquare            = 0 << 10, // default
        BottomViewStylePageControlRectangle         = 1 << 10,
        BottomViewStylePageControlCircle            = 2 << 10,
        
        // 0b11111000000000000000 == 0x0f8000
        BottomViewStylePageControlCenter            = 0 << 15, //default
        BottomViewStylePageControlLeft              = 1 << 15,
        BottomViewStylePageControlRight             = 2 << 15,
        
        // 0b 0001 1111 0000 0000 0000 0000 0000 == 0x01f00000
        BottomViewStylePageControlFeatureScale      = 1 << 20
    };
    复制代码

    自定义方式可以参考上面的自定义展示样式

    性能

    图片内部实现借鉴了UITableView的重用机制。

    用法

    1. 数据源格式:
    NSArray *arr = @[
    				@{@"image":@"", @"title:@""}, 
    				@{@"image":@"", @"title":@""}, 
    				@{@"image":@"", @"title":@""}
    				]
    复制代码

    其中image和title这这个key是必须的。

    1. 初始化代码
        ViewpagerView *viewpager = [[ViewpagerView alloc] initViewpagerViewWith:CGRectMake(0, 0, SCREEN_WIDTH, self.view.bounds.size.height)  dataSource:arr viewStyle:ViewpagerViewStyleDefault andBottomStyle:BottomViewStyleDefault | BottomViewStylePageControlCenter | BottomViewStylePageControlCircle];
        viewpager.delegate = self;
        // 设置Page Control颜色
        [viewpager setPageControlDisplayColor:RGBA(29, 108, 199, 1)];
        [viewpager setPageControlNormalColor:[UIColor redColor]];
        [self.view addSubview:viewpager];
    复制代码
    1. 点击事件委托,遵守ViewpagerViewDelegate
    - (void)viewpagerView:(ViewpagerView *)viewpagerView didSelectPage:(NSInteger)index {
        NSLog(@"xxxx %ld", index);
    }
    复制代码
    展开全文
  • iOS 图片轮播

    千次阅读 2019-12-25 21:55:48
    ###基于ScrollView的图片播放 ScrollView的方法 NSTime的循环 UIPageControl的运用 委托方法 基于iphone5 未做屏幕的适配 import "ViewController.h" @interface ViewController ()<UIScrollViewDelegate> ...

    ###基于ScrollView的图片播放

    • ScrollView的方法
    • NSTime的循环
    • UIPageControl的运用
    • 委托方法

    基于iphone5 未做屏幕的适配

    import "ViewController.h"
    
    @interface ViewController ()<UIScrollViewDelegate>
    @property(nonatomic,strong) UIScrollView *scrollView;       //声明一个UIScrollView
    @property(nonatomic, strong)UIPageControl *pageControl;     //声明一个UIPageControl
    @property (nonatomic, strong) NSTimer *timer;
    @end
    
    @implementation ViewController
    //设置ScrollView
    -(UIScrollView*)scrollView{
        if(_scrollView==nil){
        	//初始化位置
            _scrollView=[[UIScrollView alloc]initWithFrame:CGRectMake(0, 20, 320, 530)]; 
            self.scrollView.contentSize=CGSizeMake(4*_scrollView.bounds.size.width, 0);
            self.scrollView.pagingEnabled=YES;
            self.scrollView.bounces=NO;        
            self.scrollView.showsHorizontalScrollIndicator=NO;
            self.scrollView.showsVerticalScrollIndicator=NO;
            //委托
            self.scrollView.delegate = self;
            [self.view addSubview:_scrollView];        
        }
        return _scrollView;
    }
    
    //分页设置
    -(UIPageControl*)pageControl{
        if(_pageControl==nil){
            _pageControl=[[UIPageControl alloc]init];
            _pageControl.numberOfPages=4;       
            _pageControl.bounds=CGRectMake(0, 0, 150, 20);
            //设置中心
            _pageControl.center=CGPointMake(self.view.center.x, self.scrollView.frame.size.height+30); 
            _pageControl.pageIndicatorTintColor=[UIColor redColor];
            _pageControl.currentPageIndicatorTintColor=[UIColor blackColor];
            [self.view addSubview:_pageControl];
            //页数改变
            [_pageControl addTarget:self action:@selector(pageChange:) forControlEvents:UIControlEventValueChanged];        
        }
        return _pageControl;
    }
    
    //页数改变事件
    -(void)pageChange:(UIPageControl*)pageCtrl{ 
    	//页数改变同时变更scrollView
        [self.scrollView setContentOffset:CGPointMake(pageCtrl.currentPage*self.scrollView.bounds.size.width, 0) animated:YES];
    }
    
    //scrollView的contentOffset 改变
    -(void)scrollViewDidScroll:(UIScrollView *)scrollView{    
        CGFloat scrollviewW =  scrollView.frame.size.width;
        CGFloat x = scrollView.contentOffset.x;
        int page = (x + scrollviewW / 2) /  scrollviewW;
        self.pageControl.currentPage=page;
    }
    
    - (void)viewDidLoad {
        [super viewDidLoad]; 
        for (int i=0; i<4; i++) {
            NSString *imageName= [NSString  stringWithFormat:@"%02d",i+1]  ;
            UIImage *image=[UIImage  imageNamed:imageName];     
            UIImageView *imageView =[[UIImageView alloc]initWithFrame:self.scrollView.bounds];
            imageView.image=image;
            [self.scrollView addSubview:imageView ];
        }
        //循环    
        [self.scrollView.subviews enumerateObjectsUsingBlock:^(UIImageView *imageView, NSUInteger idx, BOOL *stop) {
            CGRect  frame = imageView.frame;
            //索引变化的时候改变坐标位置
            frame.origin.x=frame.size.width*idx;
            imageView.frame=frame;
            
        }];
        //默认从第一个
        self.pageControl.currentPage=0;
        [self startTimer];    
    }
    
    //绑定上timer
    - (void)startTimer
    {
        self.timer = [NSTimer timerWithTimeInterval:2.0 target:self selector:@selector(updateTimer) userInfo:nil repeats:YES];
        [[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
    }
    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];   
    }
    
    //更新timer
    - (void)updateTimer
    {   
        int page = (self.pageControl.currentPage + 1) % 4;
        self.pageControl.currentPage = page;   
        [self pageChange:self.pageControl];
    }
     
    @end
    
    

    展开全文
  • ios图片轮播

    2015-08-11 13:06:15
    简单图片轮播

    define iImageCount 5
    define scrollViewWidth (_scrollView.bounds.size.width)
    当前显示图片 左侧 & 右侧 图片索引
    define leftImageIndex ((_currentImageIndex - 1 + iImageCount) % iImageCount)
    define rightImageIndex ((_currentImageIndex + 1) % iImageCount)

    @interface ViewController ()

    @property (nonatomic, strong) UIScrollView *scrollView;
    @property (nonatomic, strong) UIPageControl *pageControl;

    // 轮播图片索引 & imageView
    @property (nonatomic, strong) UIImageView *leftImageView;
    @property (nonatomic, strong) UIImageView *middleImageView;
    @property (nonatomic, strong) UIImageView *rightImageView;

    @property (nonatomic, assign) NSInteger currentImageIndex;

    @property (nonatomic, strong) NSTimer *timer;

    @end

    @implementation ViewController

    pragma -mark 懒加载
    /**
    * 懒加载中,对成员变量的引用,使用 self. 和 _ 是有区别的
    * 在使用的时候加载, 就是一个getter
    */
    -(UIScrollView *)scrollView
    {
    if (!_scrollView) {
    _scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(10, 20, 300, 130)];
    _scrollView.delegate = self;
    [_scrollView setBackgroundColor:[UIColor whiteColor]];

        _scrollView.contentSize = CGSizeMake(3 * scrollViewWidth, 0);
    
        // 分页、滚动条
        _scrollView.pagingEnabled = YES;
        _scrollView.showsHorizontalScrollIndicator = NO;
    
        [self addSubViewsForScrollView];
    
        [_scrollView setContentOffset:CGPointMake(scrollViewWidth, 0)];
    
        [self.view addSubview:_scrollView];
    }
    return _scrollView;
    

    }

    -(void)addSubViewsForScrollView
    {
    CGFloat width = _scrollView.bounds.size.width;
    CGFloat height = _scrollView.bounds.size.height;

    self.leftImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, width, height)];
    self.middleImageView = [[UIImageView alloc] initWithFrame:CGRectMake(scrollViewWidth, 0, width, height)];
    self.rightImageView = [[UIImageView alloc] initWithFrame:CGRectMake(scrollViewWidth * 2, 0, width, height)];
    _currentImageIndex = 0;
    [self setImageForScrollView];
    
    NSArray *array = @[self.leftImageView, self.middleImageView, self.rightImageView];
    for (UIImageView *imageView in array) {
        [self.scrollView addSubview:imageView];
    }
    

    }

    -(UIPageControl *)pageControl
    {
    // pageControl的表示当前页的指示器变化的方向,根据点击的位置处于pageControl中心的哪个方向
    if (!_pageControl) {
    _pageControl = [[UIPageControl alloc] init];
    _pageControl.numberOfPages = iImageCount;
    CGSize size = [_pageControl sizeForNumberOfPages:_pageControl.numberOfPages];
    _pageControl.frame = CGRectMake(0, 0, size.width, size.height);
    _pageControl.center = CGPointMake(self.scrollView.center.x, 130);

        _pageControl.pageIndicatorTintColor = [UIColor whiteColor];
        _pageControl.currentPageIndicatorTintColor = [UIColor blackColor];
    
        // 因为继承自UIController,所以可以添加监听方法
        [_pageControl addTarget:self action:@selector(pageChanged:)
               forControlEvents:UIControlEventValueChanged];
    }
    return _pageControl;
    

    }

    -(void)pageChanged:(UIPageControl *)pageControl
    {
    _currentImageIndex = pageControl.currentPage;

    [self setImageForScrollView];
    

    }

    pragma -mark UI
    - (void)viewDidLoad {
    [super viewDidLoad];

    [self.view addSubview:self.scrollView];
    
    [self.view addSubview:self.pageControl];
    
    [self startTimer];
    

    }

    pragma -mark UIScrollViewDelegate
    -(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
    {
    if (scrollView.contentOffset.x < scrollViewWidth) {
    // 向左滑动
    _currentImageIndex = leftImageIndex;
    } else if (scrollView.contentOffset.x > scrollViewWidth) {
    // 向右移动
    _currentImageIndex = rightImageIndex;
    } else {
    // 不移动
    }

    // 设置_pageControl的当前指示
    _pageControl.currentPage = _currentImageIndex;
    
    [self setImageForScrollView];
    [self.scrollView setContentOffset:CGPointMake(scrollViewWidth, 0)];
    

    }

    • (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
      {
      [self stopTimer];
      }

    • (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
      {
      [self startTimer];
      }

    -(void) setImageForScrollView
    {
    [self.middleImageView setImage:[UIImage imageNamed:[NSString stringWithFormat:@”img_0%ld”,
    (long)_currentImageIndex]]];
    [self.leftImageView setImage:[UIImage imageNamed:[NSString stringWithFormat:@”img_0%ld”,
    (long)leftImageIndex]]];
    [self.rightImageView setImage:[UIImage imageNamed:[NSString stringWithFormat:@”img_0%ld”,
    (long)rightImageIndex]]];
    }

    pragma -mark Timer
    - (void)startTimer
    {
    self.timer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(updateTimer)
    userInfo:nil repeats:YES];
    [[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
    }

    • (void)updateTimer
      {
      _currentImageIndex = rightImageIndex;
      _pageControl.currentPage = _currentImageIndex;
      [self setImageForScrollView];
      }

    • (void)stopTimer
      {
      [self.timer invalidate];
      }

    展开全文
  • IOS 图片轮播

    2014-12-11 11:01:00
    2019独角兽企业重金招聘Python工程师标准>>> ...
    #import <UIKit/UIKit.h>
    
    @interface ViewController : UIViewController
    
    @end
    
    #import "ViewController.h"
    
    
    @interface ViewController ()<UIScrollViewDelegate>
    
    @property(nonatomic, strong) NSTimer *timer;
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        UIScrollView *sView = [[UIScrollView alloc]initWithFrame:CGRectMake(10, 20, 300, 440)];
        
        sView.contentSize = CGSizeMake(1200, 440);
        sView.pagingEnabled = YES;
        sView.showsHorizontalScrollIndicator = NO;
        sView.tag = 200;
        //循环创建添加4张图片
        for (int i = 0; i < 4; i ++) {
            UIImageView *imgView = [[UIImageView alloc]init];
            imgView.frame = CGRectMake(i*300, 0, 300, 440);
            imgView.image = [UIImage imageNamed:[NSString  stringWithFormat:@"%d",i]];
            [sView addSubview:imgView];
        }
        
        [self.view addSubview:sView];
        
        //创建书页控件
        UIPageControl *pageControl = [[UIPageControl alloc]init];
        pageControl.frame = CGRectMake( 100, 440, 120, 20);
        pageControl.numberOfPages = 4;
        pageControl.currentPage = 0;
        pageControl.tag = 100;
        [self.view addSubview:pageControl];
        
        //设置scrollView的代理为当前类对象
        sView.delegate = self;
        
        //添加定时器,使用scheuled方法创建的定时器,不需要用fird方法打开(自动开启的)
        [self addtimer];
    }
    
    //添加定时器方法
    -(void) addtimer{
        _timer = [NSTimer scheduledTimerWithTimeInterval:5.0 target:self selector:@selector(nextPage) userInfo:nil repeats:YES];
        
        //返回当前的消息循环对象
        [[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
    }
    //删除定时器方法
    -(void) deleteTimer{
        [_timer invalidate];
        _timer = nil;
    }
    
    -(void)nextPage{
        int page = 0;
        UIPageControl *pControl = (UIPageControl *)[self.view viewWithTag:100];
        if (pControl.currentPage == 3) {
            page = 0;
        }else{
            page = pControl.currentPage + 1;
        }
        
        //计算滚动的位置
        UIScrollView *sView = (UIScrollView *)[self.view viewWithTag:200];
        CGFloat offsetX = page * sView.frame.size.width;
        CGPoint offset = CGPointMake(offsetX, 0);
        [sView setContentOffset:offset animated:YES];
    }
    
    #pragma  - mark UIScrollViewDelegate
    //监听滚动的位置,改变pageCotrol的currentPage的值.
    -(void)scrollViewDidScroll:(UIScrollView *)scrollView{
        
        UIPageControl *pControl = (UIPageControl *)[self.view viewWithTag:100];
        CGFloat scrollW = scrollView.frame.size.width;
        
        int page = (scrollView.contentOffset.x + scrollW * 0.5 )/ scrollW;
        pControl.currentPage = page;
    }
    
    -(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
        [self deleteTimer];
    }
    
    -(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
        [self addtimer];
    }
    
    @end


    转载于:https://my.oschina.net/u/2285956/blog/354917

    展开全文
  • 强大的Swift 3轮播图,iOS图片轮播 LLCycleScrollView
  • IOS 图片轮播器Demo(UIScrollerView)
  • Android 和 iOS 图片轮播

    2017-04-27 09:40:21
    iOS图片轮播 讲解顺序: 效果图 代码 所用类的官方文档讲解 1、效果图 iOS.gif 2、代码 #import "ViewController.h" #define w self.view.frame.size.width static BOOL order; @interface ...
  • IOS 图片轮播实现原理的一种 图片轮播所要实现的是在一个显示区域内通过滑动来展示不同的图片。 当图片较少时我们可以采用在滚动视图上添加很多张图片来实现。 但是如果图片数量较多时,一次性加载过多图片会...
  • iOS 图片轮播图(自动滚动) #import "DDViewController.h" #define DDImageCount 5 @interface DDViewController ()<UIScrollViewDelegate> @property (weak, nonatomic) IBOutlet UIScrollView *...
  • iOS图片轮播各种样式以及头部图片轮播的下拉放大效果
  • https://github.com/grammermao/MMScrollview 已经支持cocoapods导入,欢迎提意见,同时欢迎你的小星星,你的支持是我写demo的无限动力 gif图片太大 就传png图片
  • ios图片轮播效果

    千次阅读 2018-03-13 16:47:28
    ImageCarousel简单封装的图片轮播器 内存过大由于我加载的图片分辨率较高(4k)文件目录使用初始化自定义view,并提供title和图片数组,设置控制器代理shufflingView *myView = [[shufflingView alloc]
  • iOS图片轮播

    2016-11-05 13:05:46
    代码记录:ViewController.m 文件中(局部):#import "SONGTgHeaderView.h" // 添加图片轮播 - (void)viewDidLoad { [super viewDidLoad]; self.tableView.rowHeight = 90; // 设置footerView
  • IOS 图片轮播

    2019-09-13 05:12:32
    #import"ViewController.h" #definekImageCount5 @interfaceViewController()<UIScrollViewDelegate> @property(nonatomic,strong)UIScrol...
  • iOS 图片轮播

    2016-05-20 13:20:00
    iOS开发UI篇—无限轮播(功能完善) iOS开发UI篇—无限轮播(功能完善) 一、自动滚动 添加并设置一个定时器,每个2.0秒,就跳转到下一条。  获取当前正在展示的位置。 1 [self addNSTimer]; 2 } 3 ...
  • ios 图片轮播详解

    千次阅读 2015-02-05 10:32:53
    图片轮播(图片在界面上不停的按顺序播放),主要是以scrollerview上面实现, 实现原理:假设scrollerview 上需要展示5张图片,为了能够让用户感觉你在向右划滑动第一张的时候进入的时最后一张图片,向左滑动最后...
  • IOS图片轮播和引导界面

    热门讨论 2012-09-29 16:37:47
    快没分了。。 博客: http://blog.csdn.net/li6185377/article/details/8032711
  • 该方法实现了图片轮播效果: pictureLoop 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787...
  • ios图片轮播加定时器

    2016-08-25 23:02:23
    头文件 // // pagingImageInScrollView.h // ZJQpaging-image-scrollview // // Created by 郑敬勤 on 16/8/7. // Copyright © 2016年 郑敬勤. All rights reserved. ...
  • 博客地址:http://blog.csdn.net/luohancc/article/details/50371892
  • iOS图片轮播器的使用

    2016-04-09 07:53:09
    #import "ViewController.h" @interface ViewController ()UIScrollViewDelegate> @property (weak, nonatomic) IBOutlet UIScrollView *scrollView; @property (weak, nonatomic) IBOutlet ...UIPageContro
  • iOS图片轮播器(第三方SDCycleScrollView)

    千次阅读 2016-07-12 16:56:21
    一:关于图片轮播器以前都是自己写图片轮播器,可以使UIiscrollerView也可以使用UIcollectionView,但是不管是使用UIiscrollerView还是使用UIcollectionView实现过程都略显繁琐,今天给大家介绍一个简单好用的第三方...

空空如也

1 2 3 4 5 ... 20
收藏数 631
精华内容 252
关键字:

ios图片轮播