首先说一下实现的思想:

  1. 用UIScrollView实现,在scrollView上添加3个UIImageView,分别用来显示上一张图片,当前显示的图片,下一张图片。scrollView在不滑动的时候永远显示当前图片(第二张图片)即contentOffset = CGPointMake(scrollViewW,0),在滑动的时候可以预览部分上一张图片或下一张图片。现在以向左滑动为例,因为已经设置好三张图片,我们向左滑动可以看到下一张图片的一部分(此时屏幕显示着部分当前图片和部分下一张图片)。如果完成了向左滑动,在UIScrollView的代理方法 scrollViewDidEndDecelerating:里 将三个UIImageView上显示的图片更换(下标一次+1),此时第二个imageView显示的就是之前的第三个imageView上的图片,最后将scrollView的偏移量拉回到第二张图片上[scrollView setContentOffset:CGPointMake(bannerScrollViewW, 0) animated:NO]

    - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
    
        NSInteger leftIndex;
    NSInteger rightIndex; if (scrollView.contentOffset.x == bannerScrollViewW * ) {
    ;
    /** 向左滑 计算 左 中 右 的下标索引*/
    leftIndex = self.centerIndex % self.imageNames.count; self.centerIndex = (self.centerIndex+) % self.imageNames.count; rightIndex = (self.centerIndex +) % self.imageNames.count;
    //NSLog(@"往左滑");
    }else if (scrollView.contentOffset.x == ) {
    /** 向右滑 计算 左 中 右 的下标索引*/
    rightIndex = self.centerIndex;
    self.centerIndex = (self.centerIndex - ) < ?(self.imageNames.count - ):(self.centerIndex - );
    leftIndex = (self.centerIndex - ) < ?(self.imageNames.count - ):(self.centerIndex - );
    //NSLog(@"往右滑");
    }else {
    // 没有滑走 什么都不做,直接return
    return;
    } /** 设置图片 */
    self.leftImageView.image = [UIImage imageNamed:self.imageNames[leftIndex]];
    self.centerImageView.image = [UIImage imageNamed:self.imageNames[self.centerIndex]];
    self.rightImageView.image = [UIImage imageNamed:self.imageNames[rightIndex]]; /** 设置pageControl currentPage 因为永远显示中间的图片,故此currentPage=centerIndex */
    self.pageControl.currentPage = self.centerIndex; // 将 bannerScrollView 拉回到中间图片的位置 显示图片
    [scrollView setContentOffset:CGPointMake(bannerScrollViewW, ) animated:NO];
    }
  2. 就用一个UIImageView来实现,给imageView添加swipe手势(左右都添加),在手势绑定的方法里更换图片,只是在设置下一张图片后要添加一个过渡动画 CATransition;利用过度动画的过度效果让图片产生翻页的效果;只是这种方式没有UISCrollView的那种交互性,不能中途终止翻页;
    - (void)swipeGestureRight:(UISwipeGestureRecognizer *)gesture {
    
        self.centerIndex = (self.centerIndex+) % self.imageNames.count;
    
        self.centerImageView.image = [UIImage imageNamed:self.imageNames[self.centerIndex]];
    
        CATransition *animation=[CATransition animation];
    animation.delegate = self;
    animation.type = @"push";
    animation.subtype = @"fromRight";
    animation.duration = ;
    animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; [self.centerImageView.layer addAnimation:animation forKey:@"cube"]; /** 设置pageControl currentPage 因为永远显示中间的图片,故此currentPage=centerIndex */
    self.pageControl.currentPage = self.centerIndex;
    NSLog(@"right");
    } - (void)animationDidStart:(CAAnimation *)anim {
    self.isAnimation = YES;
    [self.timer setFireDate:[NSDate dateWithTimeIntervalSinceNow:]];
    } - (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag {
    self.isAnimation = NO;
    } - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
    return !self.isAnimation;
    }

    完整的代码:http://pan.baidu.com/s/1c1u6NCG

iOS 无限轮播图的两种实现的更多相关文章

  1. JavaScript+HTML+CSS 无缝滚动轮播图的两种方式

    第一种方式 在轮播图最后添加第一张,一张重复的图片. 点击前一张,到了第一张,将父级oList移动到最后一张(也就是添加的重复的第一张),在进行后续动画. 点击下一张,到了最后一张(也就是添加的重复的 ...

  2. iOS最笨的办法实现无限轮播图(网络加载)

    iOS最笨的办法实现无限轮播图(网络加载) 简单的做了一下: 使用方法: 把 请求返回的 图片地址(字符串类型)放进数组中就行 可以使用SDWebImage(我就是用的这个)等..需要自己导入并引用, ...

  3. iOS 图片轮播图(自动滚动)

    iOS 图片轮播图(自动滚动) #import "DDViewController.h" #define DDImageCount 5 @interface DDViewContr ...

  4. 用UICollectionView实现无限轮播图

    用UICollectionView实现无限轮播图 效果 源码 https://github.com/YouXianMing/Animations 细节

  5. 简单介绍无限轮播图,js源代码

    无限轮播图js源代码,今天介绍一下用js简单的编写无限轮播图 <!DOCTYPE html> <html>   <head>     <meta charse ...

  6. Android之无限轮播图源代码

    Android轮播广告图是大家经常用到的一个控件今天便撸了一把代码 实现步骤 使用Viewpager进行实现图片滑动 设置ViewPager的数据,让其无限切换 Activity代码 public c ...

  7. swift-自定义无限轮播图

    一  前言 1.之前一直在用OC编程,最近才开始接触使用swift就发现使用OC越来越不习惯,感觉已经爱上了swift. 2.这个自定义轮播图只是对之前OC版本进行了翻译,欢迎指正. 3.我决定一步步 ...

  8. iOS中 轮播图放哪最合适? 技术分享

    我们知道,轮播图放在cell或collectionViewCell上会影响用户层级交互事件,并且实现起来比较麻烦,现在推出一个技术点:答题思路是:将UIScrollView放在UIView或UICol ...

  9. iOS开发--轮播图

    在不少项目中,都会有图片轮播这个功能,现在网上关于图片轮播的框架层出不穷,千奇百怪,笔者根据自己的思路,用两个imageView也实现了图片轮播,这里说说笔者的主要思路以及大概步骤,具体代码请看这里, ...

随机推荐

  1. (原)torch中微调某层参数

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/6221664.html 参考网址: https://github.com/torch/nn/issues ...

  2. zip命令的用法

    语法zip [参数] [打包后的文件名] [打包的目录路径] 参数列表-a 将文件转成ASCII模式-F 尝试修复损坏的压缩文件-h 显示帮助界面-m 将文件压缩之后,删除源文件-n 特定字符串,不压 ...

  3. table-cell的手机应用场景

    前言 最近在前端观察看见了这篇老文章,看见了元素居中的5种办法,其中提到了display:table-cell这个css显示的新属性,按照当时的浏览器市场来说想必兼容性会是糟糕的一比,但是现在这坛老酒 ...

  4. 解决div里面img的缝隙问题~

    解决div里面img的缝隙问题 图片IMG与容器下边界之间有空隙怎么办?这里介绍3中简单的解决方法. 第一,给图片img标签display:block. img{display:block} 第二,定 ...

  5. Android学习笔记--存储方案(SharedPreference、文件IO)

    1. SharedPreference SharedPreference可以很容易的保存key-value对,通常用于保存配置信息.保存的步骤 1. 获得SharedPreferences对象 (最后 ...

  6. Harris Corner(Harris角检测)

    在做图像匹配时,常需要对两幅图像中的特征点进行匹配.为了保证匹配的准确性,所选择的特征必须有其独特性,角点可以作为一种不错的特征. 那么为什么角点有其独特性呢?角点往往是两条边缘的交点,它是两条边缘方 ...

  7. org/hamcrest/SelfDescribing

    今天在Idea下使用JUtil的时候,运行@Test,报错:org/hamcrest/SelfDescribing 解决办法: (1)换成junit-4.8.jar (2)junit-4.11.jar ...

  8. coredump查原因

    1. dmesg |tail -n 1 2. objdump -DCI ./a.out 示例: $ cat a.cpp #include <stdio.h> int main(){ int ...

  9. Codeforces 519E A and B and Lecture Rooms

    http://codeforces.com/contest/519/problem/E 题意: 给出一棵树和m次询问,每次询问给出两个点,求出到这两个点距离相等的点的个数. 思路: lca...然后直 ...

  10. python 操作 office

    首先介绍下office win32 com接口,这个是MS为自动化提供的操作接口,比如我们打开一个WORD文档,就可以在里面编辑VB脚本,实现我们自己的效果.对于这种一本万利的买卖,Python怎么能 ...