iOS 开发中滑动视图的循环播放

本文介绍了一种使用Objective-C实现的滑动视图组件。该组件通过UIScrollView展示循环播放的图片,并利用UIPageControl指示当前页面。文章详细阐述了如何初始化视图、设置图片以及实现自动轮播等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

滑动视图的实现过程:

     代码如下:

.h文件:

#import <UIKit/UIKit.h>


@interface LoopView : UIView

@property (nonatomic,strong) NSArray *imageArray;

@end

.m文件:

#import "LoopView.h"


@interface LoopView() <UIScrollViewDelegate> {

    //定义一个定时器

    NSTimer *_timer;

}

//滑动视图所需要的属性

@property (nonatomic,strong)UIScrollView *scrollView;

@property (nonatomic,strong)UIPageControl *pageControl;

@property (nonatomic,strong)UIImageView *leftImage;

@property (nonatomic,strong)UIImageView *middenImage;

@property (nonatomic,strong)UIImageView *rightImage;

@property (nonatomic,assign)NSInteger currentNum;


@end


@implementation LoopView

//初始化

- (instancetype) initWithFrame:(CGRect)frame {

    if (self = [super initWithFrame:frame]) {

        

    }

         return self;

}

- (void)setImageArray:(NSArray *)imageArray {

    _imageArray = imageArray;

    //初始化控件

    [self creatView];

}

#pragma mark - 初始化控件

- (void)creatView {

//    设置宽高

    CGFloat width = self.frame.size.width;

    CGFloat height = self.frame.size.height;

//    设置scrollView的属性

    _scrollView = [[UIScrollView  alloc] initWithFrame:self.bounds];

    //打开分页属性

    _scrollView.pagingEnabled = YES;

    //关闭水平和垂直方向的显示条

    _scrollView.showsVerticalScrollIndicator = NO;

    _scrollView.showsHorizontalScrollIndicator = NO;

    //设置滑动范围

    _scrollView.contentSize = CGSizeMake(width * _imageArray.count,height);

    //设置代理方法

    _scrollView.delegate = self;

    //添加到视图上

    [self addSubview:_scrollView];

    

//  设置分页控件的属性

    _pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(0, self.frame.size.height - 30, width, 30)];

    //设置分页控件的分页数

    _pageControl.numberOfPages = _imageArray.count;

    //设置当前分页数

    _pageControl.currentPage = 0;

    //设置分页控件的显示颜色

    _pageControl.pageIndicatorTintColor = [UIColor redColor];

    //添加到视图上面

    [self addSubview:_pageControl];

//    设置左中右三个imageViewframe

    _leftImage = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0,width , height)];

    _middenImage = [[UIImageView alloc] initWithFrame:CGRectMake(width, 0,width , height)];

    _rightImage = [[UIImageView alloc] initWithFrame:CGRectMake(width * 2, 0,width , height)];

    //添加到视图上

    [_scrollView addSubview:_leftImage];

    [_scrollView addSubview:_middenImage];

    [_scrollView addSubview:_rightImage];

    

    

    //开启定时器

    _timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timeAction:) userInfo:nil repeats:YES];

//    设置图片

    [self loadImage];

}

- (void) loadImage {

   

    //给左中右三个imageView添加图片

    _middenImage.image = [UIImage imageNamed:_imageArray[_currentNum]];

    

    NSInteger leftIndex = (_currentNum - 1 + _imageArray.count)%_imageArray.count;

    _leftImage.image = [UIImage imageNamed:_imageArray[leftIndex]];

    

    NSInteger rightIndex = (_currentNum + 1) % _imageArray.count;

    _rightImage.image = [UIImage imageNamed:_imageArray[rightIndex]];

    _pageControl.currentPage = _currentNum;


    

}

#pragma mark - scrollView的代理方法

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {

    if (scrollView.contentOffset.x > self.frame.size.width) {

        _currentNum = (_currentNum+1) %_imageArray.count;

    } else if(scrollView.contentOffset.x < self.frame.size.width){

        _currentNum = (_currentNum - 1+_imageArray.count) %_imageArray.count;

    }

    [self loadImage];

//设置滑动区域的大小

    scrollView.contentOffset = CGPointMake(_scrollView.bounds.size.width, 0);

}

#pragma mark - 定时器的方法

- (void)timeAction:(NSTimer *)timer {

    

    _currentNum = _currentNum  % _imageArray.count;

    [self loadImage];

    _currentNum++;

    _scrollView.contentOffset = CGPointMake(_scrollView.frame.size.width, 0);

    

}

@end



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值