3个UIimageView实现图片的循环切换
来源:互联网 发布:小米电视有线网络设置 编辑:程序博客网 时间:2024/05/21 18:32
#import "ViewController.h"
#define KWidth self.view.frame.size.width
#define KHeight self.view.frame.size.height
@interface ViewController ()<UIScrollViewDelegate>
@property(nonatomic,weak)UIScrollView *scroll;
/**存放图片名的数组*/
@property(nonatomic,strong)NSMutableArray *imageNameArray;
/**存放3个UIimageView的数组*/
@property(nonatomic,strong)NSMutableArray *imageViewArray;
/**存放3个UIimageView中未被利用的UIimageView的数组*/
@property(nonatomic,strong)NSMutableArray *imageUnusedViewArray;
@end
@implementation ViewController
//懒加载(用到时才加载)
-(NSMutableArray *)imageNameArray{
if (_imageNameArray==nil)
{
_imageNameArray = [NSMutableArrayarray];
}
return_imageNameArray;
}
-(NSMutableArray *)imageViewArray{
if (_imageViewArray==nil)
{
_imageViewArray = [NSMutableArrayarray];
}
return_imageViewArray;
}
-(NSMutableArray *)imageUnusedViewArray{
if (_imageUnusedViewArray==nil)
{
_imageUnusedViewArray = [NSMutableArrayarray];
}
return_imageUnusedViewArray;
}
- (void)viewDidLoad {
[superviewDidLoad];
//加载数据
[self_loadData];
//加载视图
[self_loadView];
}
#pragma mark - 加载数据
-(void)_loadData{
for (int i=1; i<12; i++)
{
NSString *imageName = [NSStringstringWithFormat:@"t%i.jpg",i];
[self.imageNameArrayaddObject:imageName];
}
}
#pragma mark - 加载视图
-(void)_loadView{
UIScrollView *scroll = [[UIScrollViewalloc] initWithFrame:self.view.bounds];
[self.viewaddSubview:scroll];
scroll.contentSize =CGSizeMake(KWidth*self.imageNameArray.count,0);
scroll.pagingEnabled =YES;
scroll.delegate =self;
self.scroll = scroll;
//添加三个视图
for (int i=0; i<3; i++)
{
UIImageView *imageView = [[UIImageViewalloc] initWithFrame:CGRectMake(i*KWidth,0, KWidth, KHeight)];
imageView.image = [UIImageimageNamed:self.imageNameArray[i]];
[self.scrolladdSubview:imageView];
[self.imageViewArrayaddObject:imageView];
}
}
-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
//只有contentOffset是整数时才进行下面判断,这样做就相当于-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView方法
if (scrollView.contentOffset.x/KWidth==(int)(scrollView.contentOffset.x/KWidth))
{
//获取未利用的imageView
[selfgetUnusedView];
//不是在第一页,也不是在最后一页的时候
if (scrollView.contentOffset.x>0&&scrollView.contentOffset.x<KWidth*(self.imageNameArray.count-1))
{
[selfsetImageFrameWithImage:self.imageUnusedViewArray[0]andImageWith:frontView];
[selfsetImageFrameWithImage:self.imageUnusedViewArray[1]andImageWith:nextView];
//如果当没利用的imageView数量大于3时,证明当前页面也没有利用,所以当前页面就没有图片(当滑的太快时就会出现以上情况)
if (self.imageUnusedViewArray.count>2)
{
[selfsetImageFrameWithImage:self.imageUnusedViewArray[2]andImageWith:defineView];
}
}
//如果实在第一页
else if(scrollView.contentOffset.x==0)
{
[selfsetImageFrameWithImage:self.imageViewArray[0]andImageWith:defineView];
[selfsetImageFrameWithImage:self.imageViewArray[1]andImageWith:nextView];
}
//如果是在最后一页
else
{
[selfsetImageFrameWithImage:self.imageViewArray[0]andImageWith:defineView];
[selfsetImageFrameWithImage:self.imageViewArray[1]andImageWith:frontView];
}
}
//如果contentOffset不是整数就返回
else
{
return;
}
}
#pragma mark - 设置frame和图片
-(void)setImageFrameWithImage:(UIImageView *)imageView andImageWith:(NSInteger)flag{
//设置frame
CGFloat space = flag*KWidth;
CGFloat X = self.scroll.contentOffset.x+space;
imageView.frame =CGRectMake(X, 0,KWidth, KHeight);
//设置图片
NSInteger imageIndex = X/KWidth;
imageView.image = [UIImageimageNamed:self.imageNameArray[imageIndex]];
}
#pragma mark - 获得未被利用的imageView
-(void)getUnusedView{
for (int i=0; i<self.imageViewArray.count; i++)
{
UIImageView *imageV = self.imageViewArray[i];
if (imageV.frame.origin.x!=self.scroll.contentOffset.x)
{
[self.imageUnusedViewArrayaddObject:imageV];
}
}
}
@end
- 3个UIimageView实现图片的循环切换
- iOS 循环轮播框架,使用3个UIImageView实现
- 图片左右循环切换功能的实现
- iOS:UIimageView切换图片渐入渐出的动画
- iOS:UIimageView切换图片渐入渐出的动画
- 多张图片的左右切换特效,实现循环切换
- iOS UIImageView利用UIScrollView实现图片循环滚动
- UIScrollView+UIpageControl实现图片的循环滚动切换
- UIScrollView+UIpageControl实现图片的循环滚动切换
- UIImageView多张图片切换
- UIImageView多张图片切换
- UIImageView 平滑过渡图片切换
- UIImageView实现图片的移动和缩放
- UIImageView实现图片幻灯片
- UIImageView实现图片幻灯片
- UIImageView实现图片幻灯片
- UIImageView实现图片幻灯片
- UIImageView实现图片幻灯片
- leetcode 日经贴,Cpp code -Contains Duplicate III
- Hibernate HelloWorld-12 HQL连接
- Unsupported major.minor version 51.0(jdk版本错误)
- svn下载网页代码
- 写给代码技术同事:被人信任才能有广阔未来
- 3个UIimageView实现图片的循环切换
- adb常用命令总结
- 相对布局相关属性
- java的Excel的导入导出功能
- pl/sql_4_事务
- js中callback.call()和callback()的区别
- spring @component的作用
- instancetype与id的区别
- winfrom 上传word文件