接触的每个项目,都会用到轮播图的部分,轮播图都写了好多次,用过各种各样的方式写:

这篇总结的博客,我将分为几个篇幅写,希望写完这几篇博客之后,我能总结出自己写这个轮播的优缺和不同之处

  1. scrollview 制作轮播
  2. tableview 制作轮播
  3. collectionview 制作轮播
  4. 三个imageview 制作轮播,两个imageView 制作轮播
  5. 一个imageView 制作轮播
  6. 设计轮播计时器 和 总结代码的优缺点(希望顺利写到这篇博客)

介绍完篇幅了,现在进入本篇的主题,用scrollview 制作 轮播;

使用的还是那个很老套的思路,就是填补最初一张和最后一张 图片,向后滚动到最后一张的时候,设置成第二张的,向左滚动到第一张的时候,

设置成倒数第二张;逻辑图 就是这样了:::::

2 0 1 2 0

总之就是这样的吧:

顺利的谱写代码--- 写代码的艺术家 v^v

1.创建一个view 作为轮播图封装 ----ScrollViewShuffling

@interface ScrollViewShuffling : UIView

// 这个是滚动视图 传入的数组
@property (nonatomic,strong)NSArray *array; @end

下面就是具体实现了,重中之重:::::::

@interface ScrollViewShuffling ()<UIScrollViewDelegate>

@property (nonatomic,strong)UIScrollView *scrollView;
@property (nonatomic,strong)NSMutableArray *scrollArray; @end @implementation ScrollViewShuffling
@synthesize array = _array; -(instancetype)initWithFrame:(CGRect)frame{ if (self == [super initWithFrame:frame]) {
}
return self;
} -(UIScrollView*)scrollView{ if (_scrollView == nil) {
CGRect scrollRect = CGRectMake(, , self.frame.size.width, self.frame.size.height);
_scrollView = [[UIScrollView alloc]initWithFrame:scrollRect];
[self addSubview:_scrollView];
_scrollView.pagingEnabled = YES;
_scrollView.delegate = self;
}
return _scrollView;
} -(void)setArray:(NSArray *)array{ NSAssert(array.count != , @"传入的滚动数组是 空的");
_array = array;
[self prepareData];
[self initImageViews];
} -(void)prepareData{ self.scrollArray = [NSMutableArray new];
// 首位 添加数组最后的元素
[self.scrollArray addObject:_array.lastObject];
// 添加数组元素
[self.scrollArray addObjectsFromArray:_array];
// 末尾 补充第一个元素
[self.scrollArray addObject:_array.firstObject];
} -(void)initImageViews{ self.scrollView.contentSize = CGSizeMake(self.scrollArray.count *self.frame.size.width, );
self.scrollView.contentOffset = CGPointMake(self.frame.size.width, ) ; for (int index = ; index < self.scrollArray.count; index++) { CGRect imageRect = CGRectMake(index*self.frame.size.width, , self.frame.size.width, self.frame.size.height);
UIImageView *imageView = [[UIImageView alloc]initWithFrame:imageRect];
// imageView.image =
imageView.backgroundColor = (UIColor*)self.scrollArray[index];
[self.scrollView addSubview:imageView];
}
} -(void)scrollViewDidScroll:(UIScrollView *)scrollView{ if (scrollView == self.scrollView) {
//检测移动的位移
if (scrollView.contentOffset.x == (self.scrollArray.count-) * self.frame.size.width ) { CGPoint startPoint = CGPointMake(self.frame.size.width, );
[self.scrollView setContentOffset:startPoint animated:false]; }else if (scrollView.contentOffset.x == ){ CGPoint endPoint = CGPointMake((self.scrollArray.count-) * self.frame.size.width,);
[self.scrollView setContentOffset:endPoint animated:false];
}else{
// 正常的滚动
}
}
}

现在实现了滚动的基本功能。

  1. 一定要设置scollview 的contensize和 contentoffset
  2. 设置scollview 的代理
  3. 数组asset 这个是考虑传空值,才加入的,如果有更好的方法,可以换掉吧

外界调用::::

/*
引入头文件
创建 + 赋值
*/
-(void)prepareScrollShuffling{ ScrollViewShuffling *scrollShuffling = [[ScrollViewShuffling alloc]initWithFrame:CGRectMake(, , self.view.frame.size.width-, )]; [self.view addSubview:scrollShuffling];;
scrollShuffling.array = self.arr;
}

scollview 就先写到这里好了,待续………………

01.轮播图之一 :scrollView 轮播的更多相关文章

  1. Android开发工程师文集-Fragment,适配器,轮播图,ScrollView,Gallery 图片浏览器,Android常用布局样式

    Android开发工程师文集-Fragment,适配器,轮播图,ScrollView,Gallery 图片浏览器,Android常用布局样式 Fragment FragmentManager frag ...

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

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

  3. vue-music 使用better-scroll遇到轮播图不能自动轮播

    根据vue-music视频中slider组建的使用,当安装新版本的better-scroll,轮播组件,不能正常轮播 这是因为,better-scroll发布新版本之后,参数设置发生改变 这是旧版本: ...

  4. 焦点轮播图(tab轮播)

    主要有两部分:1.列表导航(小图片) 2.展示区(大图片) 页面布局: HTML部分:    <div class="s_conC">                  ...

  5. swiper手滑动轮播图后自动轮播失效解决办法

    设置autoplay:true之后,再设置 autoplay:{disableOnInteraction: false} --------------------------------------- ...

  6. Android开发进程0.1 轮播图 Scrollview Fragment

    轮播图的实现 轮播图通过banner可以较为便捷的实现 1.添加本地依赖,在dependence中搜索相关依赖 2.添加banner的view组件 3.创建适配器GlideImageLoader ex ...

  7. iOS回顾笔记(05) -- 手把手教你封装一个广告轮播图框架

    html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...

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

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

  9. Swift-ScrollView轮播图的简易封装和使用

    不多说,轮播图是开发中必要一项技能,直接上代码: 先说我的思路:首次继承于UIScrollView类自定义MyScrollView,在MyScrollView里自定制方法,func creatMySc ...

  10. JavaScript--缓动动画+轮播图

    上效果: 实现步骤: 最重要的是运动公式!!! <!DOCTYPE html> <html> <head> <meta charset="UTF-8 ...

随机推荐

  1. pygame无法自动补全解决方法

    在pycharm中导入pygame 1.  如果出现 AttributeError: module 'pip' has no attribute 'main'问题 找到安装目录下 helpers/pa ...

  2. Codeforces Round #597 (Div. 2) B. Restricted RPS

    链接: https://codeforces.com/contest/1245/problem/B 题意: Let n be a positive integer. Let a,b,c be nonn ...

  3. 40、扩展原理-BeanDefinitionRegistryPostProcessor

    40.扩展原理-BeanDefinitionRegistryPostProcessor BeanDefinitionRegistryPostProcessor extends BeanFactoryP ...

  4. SQL死锁处理

    查询死锁 select request_session_id spid, OBJECT_NAME(resource_associated_entity_id) tableName from sys.d ...

  5. javascript权威指南第11章 DOM扩展

    //javascript 权威指南 第三版 第11章 DOM扩展 //取得body元素 var body = document.querySelector("body"); //取 ...

  6. OFDM为什么把高频子载波作为保护频带

    实际中发射机接收机的低通滤波器并不是理想低通滤波器,在[-W/2,W/2]之外的一个小范围(对应使用旁边的频带的用户的高频)之内也会有一些不可忽略的能量:并且,实际低通滤波器在高频子载波上的幅度也会比 ...

  7. 三十七.MySQL视图 MySQL存储过程

    1.视图的基本使用 把/etc/passwd文件的内容存储到db9库下的user表里 添加新字段id 存储记录的行号(在所有字段的前边) 创建视图v1 结构及数据user表的字段.记录一样. 创建视图 ...

  8. P3410 拍照

    漂亮小姐姐点击就送:https://www.luogu.org/problemnew/show/P3410 题目描述 小B有n个下属,现小B要带着一些下属让别人拍照. 有m个人,每个人都愿意付给小B一 ...

  9. 实验1C语言开发环境使用和数据类型、运算符、表达式

    # include <stdio.h> int main() { char ch; printf("输入一个字符:\n"); scanf("%c", ...

  10. 好久木来了,一直忙于项目(加懒惰),今天讲讲vuecli3.0的使用

    vue更新换代很快,马上vue都要出3.0了,这是一个巨大的变革,不过今天讲的是vuecli3.0,里面使用的vue仍然是2的,所有可以放心大胆使用. Vue CLI 是一个基于 Vue.js 进行快 ...