iOS 开发中滑动视图的循环播放
2016-07-16 14:08
411 查看
滑动视图的实现过程:
代码如下:
.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];
// 设置左中右三个imageView的frame
_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
代码如下:
.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];
// 设置左中右三个imageView的frame
_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
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 讲解iOS开发中基本的定位功能实现
- iOS中定位当前位置坐标及转换为火星坐标的方法
- js判断客户端是iOS还是Android等移动终端的方法
- iOS应用开发中AFNetworking库的常用HTTP操作方法小结
- iOS应用中UISearchDisplayController搜索效果的用法
- iOS App开发中的UISegmentedControl分段组件用法总结
- IOS开发环境windows化攻略
- iOS应用中UITableView左滑自定义选项及批量删除的实现
- iOS中UIAlertView警告框组件的使用教程
- 浅析iOS应用开发中线程间的通信与线程安全问题
- iOS中的UIKeyboard键盘视图使用方法小结
- 检测iOS设备是否越狱的方法
- .net平台推送ios消息的实现方法