这个是最近才写的,本以为实现起来很有难度,需要更高深的理论,

写完之后,才发现自己错误的离谱;

之所以能用一个imageview 实现轮播 基于两点:::

  1. 使用 imageview 的layer 层设置,也就是动用的是imageview的重新绘制---- 这个是视图切换的原因
  2. 使用 CATransition 动画 ------ 这个动画模拟了轮播的效果

就是简单:::

.h 的声明

@interface ImageViewShuffling : UIView
@property (nonatomic,strong)NSArray *array; @end

.m 实现,和理论解释

@interface ImageViewShuffling ()

@property (nonatomic,strong)UIImageView *imageView;
@property (nonatomic,assign)NSInteger currentIndex; @end @implementation ImageViewShuffling
@synthesize array = _array; -(instancetype)initWithFrame:(CGRect)frame{ if (self == [super initWithFrame:frame]) {
[self addSubview:self.imageView];
}
return self;
} -(void)setArray:(NSArray *)array{ NSAssert(array.count != , @"传入的滚动数组是 空的");
_array = array;
self.imageView.backgroundColor = array.firstObject;
} -(UIImageView *)imageView{ if (_imageView == nil) {
_imageView =[[UIImageView alloc]initWithFrame:CGRectMake(, , self.frame.size.width, self.frame.size.height)];
_imageView.contentMode = UIViewContentModeScaleAspectFit;
_imageView.userInteractionEnabled = YES;
/*
imageview 添加左右滑动的手势
*/
UISwipeGestureRecognizer *left = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(leftSwifAction:)];
left.direction = UISwipeGestureRecognizerDirectionLeft;
[_imageView addGestureRecognizer:left];
UISwipeGestureRecognizer *right = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(rigthSwifAction:)];
right.direction = UISwipeGestureRecognizerDirectionRight;
[_imageView addGestureRecognizer:right];
}
return _imageView;
}
/*
根据手势判断 左右的滑动 判断 显示的index
*/
-(void)rigthSwifAction:(UISwipeGestureRecognizer*)swip{ self.currentIndex = (self.currentIndex+) % (self.array.count);
[self changeImageWithIndex:self.currentIndex andDirection:@"right"];
}
-(void)leftSwifAction:(UISwipeGestureRecognizer*)swip{ self.currentIndex = (self.currentIndex - + self.array.count)%(self.array.count);
[self changeImageWithIndex:self.currentIndex andDirection:@"left"];
}

/*
这个是唯一的重点::
使用 CATransition 添加动画
*/
-(void)changeImageWithIndex:(NSInteger)integer andDirection:(NSString*)direction{ self.imageView.backgroundColor = self.array[integer]; CATransition *transition = [[CATransition alloc]init];
transition.type = kCATransitionPush; if ([direction isEqualToString:@"right"]) { transition.subtype = kCATransitionFromLeft;
}else{// if left transition.subtype = kCATransitionFromRight;
} [self.imageView.layer addAnimation:transition forKey:@"direction"];
}

有木有发现,这个实现很简单呀…………

主要是CATransition 动画的功劳…………

调用:::

-(void)prepareImageViewShuffling{

        ImageViewShuffling *imageViewShuffling = [[ImageViewShuffling alloc]initWithFrame:CGRectMake(, , self.view.frame.size.width -, )];
[self.view addSubview:imageViewShuffling];;
imageViewShuffling.array = self.arr;
}

01.轮播图之五 :一个 imageView也能 作 轮播的更多相关文章

  1. 自己动手丰衣足食之轮播图一动态修改marginTop属性实现轮播图

    引言 学习jQuery有年头了,刚开始学习时自己动手写过轮播图,放的久了以至于忘了大致思路了.现在转而做前端,抽空把jquery轮播图拿出来写一写,把各种思路都自己练习练习,这里主要使用动态修改mar ...

  2. swiper轮播问题之一:轮播图内容为动态数据生成时轮播图无法自动轮播

    本人在用H5做移动端项目中使用Swiper遇到的两个问题,因此加深了对Swiper的掌握,分享出来对刚开始接触Swiper的童鞋们或多或少会有帮助.        首先,new Swiper的初始化最 ...

  3. 【云开发】10分钟零基础学会做一个快递查询微信小程序,快速掌握微信小程序开发技能(轮播图、API请求)

    大家好,我叫小秃僧 这次分享的是10分钟零基础学会做一个快递查询微信小程序,快速掌握开发微信小程序技能. 这篇文章偏基础,特别适合还没有开发过微信小程序的童鞋,一些概念和逻辑我会讲细一点,尽可能用图说 ...

  4. android 轮播图

    轮播图是很常用的一个效果 核心功能已经实现 没有什么特殊需求 自己没事研究的 所以封装的不太好 一些地方还比较糙 为想要研究轮播图的同学提供个参考 目前测试图片为mipmap中的图片 没有写从网络加载 ...

  5. Android轮播图

    轮播图是很常用的一个效果 核心功能已经实现 没有什么特殊需求 自己没事研究的 所以封装的不太好 一些地方还比较糙 为想要研究轮播图的同学提供个参考目前测试图片为mipmap中的图片 没有写从网络加载图 ...

  6. Android轮播图Banner的实现

    从慕课网上学了一门叫做“不一样的自定义实现轮播图效果”的课程,感觉实用性较强,而且循序渐进,很适合初学者.在此对该课程做一个小小的笔记. 实现轮播思路: 1.一般轮播图是由一组图片和底部轮播圆点组成, ...

  7. 使用jq深入研究轮播图特性

    网站轮播图 太耳熟的词了  基本上做pc端的 主页绝壁会来一个轮播图的特效 轮播图他一个页面页面的切换,其实的原理是通过css的定位 ,定位到一起,第一张首先显示,其余默认隐藏. 今天我实现的这个轮播 ...

  8. 原生js实现轮播图

    原生js实现轮播图 很多网站上都有轮播图,但找到一个系统讲解的却很难,因此这里做一个简单的介绍,希望大家都能有所收获,如果有哪些不正确的地方,希望大家可以指出. 原理: 将一些图片在一行中平铺,然后计 ...

  9. JQ万能轮播图

    lunbotu.html <!DOCTYPE html> <html> <head> <meta charset="UTF-8">  ...

随机推荐

  1. HTML5 服务器发送事件(Server-Sent Events)

    沈阳SEO:HTML5 服务器发送事件(server-sent event)允许网页获得来自服务器的更新. Server-Sent 事件 - 单向消息传递 Server-Sent 事件指的是网页自动获 ...

  2. 修改DEDE文章标题长度,解决DEDE文章标题显示不全

    在用dede调用列表标题出来的时候,会发现标题文字字数显示不完全,那是因为dede默认标题出来长度是30个字符,为了让标题显示完整,要做以下修改! 进入后台–系统–系统设置–系统基本参数–其他选项–文 ...

  3. TDOA 基础之 双曲线

    TDOA 的算法基础就是时间差,根据时间差换算出距离差,后面的数学理论知识就是双曲线交点问题. 双曲线方程是2次方程,解算曲线交点也就是两个2次方程求解. 首先看双曲线定义(百度百科): 双曲线(Hy ...

  4. HTML 004 属性

    HTML 属性 属性是 HTML 元素提供的附加信息. HTML 属性 HTML 元素可以设置属性 属性可以在元素中添加附加信息 属性一般描述于开始标签 属性总是以名称/值对的形式出现,比如:name ...

  5. php数据类型之​浮点型

    所谓浮点类型,可以理解为:我们数学里面的小数. [注意]关于精度.取值范围和科学型声明不是学习的重点.因为此块在实际开发中用的特别少.我们将此块的知识点的学习标注为,了解级别.直线电机滑台 声明方式分 ...

  6. vue+上传文件夹

    在做项目开发的时候,上传东西无论文件也好,还是文件夹都需要用到 <input type="file" id="filepicker" name=" ...

  7. P1213 时钟

    题目描述 考虑将如此安排在一个 3 x 3 行列中的九个时钟: 目标要找一个最小的移动顺序将所有的指针指向12点.下面原表格列出了9种不同的旋转指针的方法,每一种方法都叫一次移动.选择1到9号移动方法 ...

  8. iptables防火墙--------基本操作

    查看规则 查看filter表中的规则 $ iptables -t filter -L 使用-t选项,指定要操作的表.使用-L 选项,查看-t选项对应表的规则,-L 选项的意思是,列出规则. ps : ...

  9. 牛客训练21674——牛牛与LCM

    Problem 链接:https://ac.nowcoder.com/acm/problem/21674 来源:牛客网 牛牛最近在学习初等数论,他的数学老师给他出了一道题,他觉得太简单了, 懒得做,于 ...

  10. (转)awk 详解

    出处:https://blog.51cto.com/yijiu/1358416 awk详解 awk是一款非常牛逼的报告生成工具,能够将文本格式化成显示为比较直观的结果 废话不多说,直接上例子 awk的 ...