supersr--图片轮播逻辑
//
// ViewController.m
// 图片轮播
//
// Created by apple on 14-5-18.
// Copyright (c) 2014年 All rights reserved.
//
#import "ViewController.h"
@interface ViewController () <UIScrollViewDelegate>
@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;
@property (weak, nonatomic) IBOutlet UIPageControl *pageControl;
/**
* 定义属性来记录当前NSTimer对象
*/
@property (nonatomic, strong) NSTimer *timer;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// 1.向scrollView中添加图片
// 取出scrollView的size
CGSize scrollSize = self.scrollView.frame.size;
for (int i = 0; i < 5; i++) {
UIImageView *imageView = [[UIImageView alloc] init];
CGFloat scrollWidth = scrollSize.width;
CGFloat imageX = scrollWidth * i;
CGFloat imageY = 0;
CGFloat imageW = scrollWidth;
CGFloat imageH = scrollSize.height;
imageView.frame = CGRectMake(imageX, imageY, imageW, imageH);
NSString *imageName = [NSString stringWithFormat:@"img_%02d",i+1];
imageView.image = [UIImage imageNamed:imageName];
[self.scrollView addSubview:imageView];
}
// 2.设置contentSize
// 不支持竖直滚动就高度设置为0
self.scrollView.contentSize = CGSizeMake(scrollSize.width * 5, 0);
// 出现分页效果,YES表示有分页效果,NO 没有分页效果,默认NO
self.scrollView.pagingEnabled = YES;
// 去掉水平滚动条
self.scrollView.showsHorizontalScrollIndicator = NO;
// 让控制器成为scrollView的代理
// 设置scrollView的代理为self
self.scrollView.delegate = self;
#pragma mark - 自动轮播代码开始
/*
// 创建定时器
// NSTimeInterval 时间间隔 单位s
// 调用target这对象的selector方法
// userInfo 数据,如果不需要就设置为nil
// repeats 是否重复执行这个方法,YES表示重复执行
NSTimer *timer = [NSTimer timerWithTimeInterval:3 target:self selector:@selector(nextPage) userInfo:nil repeats:YES];
// 添加到运行循环中
// NSRunLoopCommonModes 与处理用户事件处于同一个级别
[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
// 1.创建NSTimer对象
// 2.把这个NSTimer添加主运行循环中以NSDefaultRunLoopMode的模式
// self.timer = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(nextPage) userInfo:nil repeats:YES];
*/
[self startTimer];
}
- (void) startTimer
{
self.timer = [NSTimer timerWithTimeInterval:3 target:self selector:@selector(nextPage) userInfo:nil repeats:YES];
// 添加到运行循环中
// NSRunLoopCommonModes 与处理用户事件处于同一个级别
[[NSRunLoop mainRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
}
- (void) nextPage
{
NSLog(@"%s",__func__);
// 获取当前也
NSInteger currentPage = self.pageControl.currentPage;
// 计算下一页
NSInteger nextPage = -1;
if (currentPage == self.pageControl.numberOfPages - 1) {
nextPage = 0;
}else{
nextPage = currentPage+1;
}
// 计算contentOffsetX的值
CGFloat contextOffsetX = nextPage * self.scrollView.frame.size.width;
[UIView animateWithDuration:1 animations:^{
self.scrollView.contentOffset = CGPointMake(contextOffsetX, 0);
}];
}
#pragma mark scrollView的代理方法
// 当用户拽住scrollView中内容时候会执行这个方法
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
// invalidate 让定时器失效
// 如果调用这个方法,就能再次使用了
[self.timer invalidate];
}
// 当用户已经停止拖拽了(当用户手从界面抬起的时候)
- (void) scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
// 创建一个新NSTimer的对象
// 1.创建NSTimer对象
// 2.把这个NSTimer添加主运行循环中以NSDefaultRunLoopMode的模式
// self.timer = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(nextPage) userInfo:nil repeats:YES];
[self startTimer];
}
// 监听scrollView的滚动过程
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
// 获取滚动位置的x坐标
CGFloat offsetX = scrollView.contentOffset.x;
// 计算当前是第几页
// round(double) 四舍五入
CGFloat page = round(offsetX / scrollView.frame.size.width);
// NSLog(@"%lf",page);
if (page != self.pageControl.currentPage) {
// current 当前的
self.pageControl.currentPage = page;
}
// self.pageControl.numberOfPages 用于设置一共有多少页的
}
supersr--图片轮播逻辑的更多相关文章
- 基于面向对象的图片轮播(js原生代码)
无论你想走多远,你都需要不断地走下去.前端最精华的便是原生的js,这也是我们前端工程师的技术分层的重要指标,也提现这你的代码能力,开发的水平.废话不多说,进入今天的主要分享————基于面向对象思想的图 ...
- 一分钟搞定AlloyTouch图片轮播
一分钟搞定AlloyTouch图片轮播 轮播图也涉及到触摸和触摸反馈,同时,AlloyTouch可以把惯性运动打开或者关闭,并且设置min和max为运动区域,超出会自动回弹.除了一般的竖向滚动,A ...
- Javascript和jQuery WordPress 图片轮播插件, 内容滚动插件,前后切换幻灯片形式显示
用于在有限的网页空间内展示一组产品图片或者照片,同时还有非常吸引人的动画效果.本文向大家推荐12款实用的 jQuery 图片轮播效果插件,帮助你在你的项目中加入一些效果精美的图片轮播效果,希望这些插件 ...
- Android高级图片滚动控件,编写3D版的图片轮播器
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/17482089 大家好,好久不见了,最近由于工作特别繁忙,已经有一个多月的时间没写博 ...
- Angular2组件与指令的小实践——实现一个图片轮播组件
如果说模块系统是Angular2的灵魂,那其组件体系就是其躯体,在模块的支持下渲染出所有用户直接看得见的东西,一个项目最表层的东西就是组件呈现的视图.而除了直接看的见的躯体之外,一个完整的" ...
- html css+div+jquery实现图片轮播
一直想自己动手做一个图片轮播的控件,查查网上的资料大多引用已经做好的组件,其原理算法不是很清楚,于是自己用jquery写了一个.先看下效果图: 主要界面实现思路如下: 1.新建一个div宽度为100% ...
- Android 使用ViewPager 做的半吊子的图片轮播
Android 使用ViewPager 做的半吊子的图片轮播 效果图 虽然不咋样,但是最起码的功能是实现了,下面我们来一步步的实现它. 界面 下面我们来分析一下界面的构成 整体的布局: 因为我们要做出 ...
- 一起写一个Android图片轮播控件
注:本文提到的Android轮播控件Demo地址: Android图片轮播控件 1. 轮播控件的组成部分 我们以知乎日报Android客户端的轮播控件为例,分析一下轮播控件的主要组成: 首先我们要有用 ...
- H5如何做手机app(移动Web App)?图片轮播?ionic、MUI
移动Web App 跨平台开发 用户不需要去卖场来下载安装App 任何时候都可以发布App只需要一个开发项目 可以使用HTML5,CSS3以及JavaScript以及服务器端语言来完成(PHP,Rub ...
- 使用jQuery做简单的图片轮播效果
一.本特效主要用到的前端知识点 CSS中绝对定位(absolute)CSS实现垂直居中jQuery中简单的淡入淡出动画效果(fadeIn,fadeOut)定时器(setInterval,clear ...
随机推荐
- html 框架
通过使用框架,你可以在同一个浏览器窗口中显示不止一个页面. 本例演示:如何使用三份不同的文档制作一个垂直框架. <html> <frameset cols="25%,50% ...
- 数据库左连接left join、右连接right join、内连接inner join on 及 where条件查询的区别
join on 与 where 条件的执行先后顺序: join on 条件先执行,where条件后执行:join on的条件在连接表时过滤,而where则是在生成中间表后对临时表过滤 left joi ...
- 【C语言入门教程】3.3 条件控制语句
在程序的 3 种基本结构中,第二种是选择结构,选择结构是根据程序运行时获得的条件,决定程序执行情况.条件控制语句可用来实现这种结构,C 语言提供了 if 语句和 switch 语句两种条件控制语句,i ...
- SQL2008"阻止保存要求重新创建表的更改"问题的解决
在sql server2008中修改数据库中某个字段的时候,会弹出以下提示: 导致数据库表在表设计界面无法修改,好像只能通过sql语句修改,其实只要改一下sql server的一个配置项就可以了,具体 ...
- saltstack 入门命令
master服务启动 CentOS 7 (Debian.OpenSuse.Fedora) systemctl start salt-master /etc/init.d/salt-master sta ...
- CentOS 6.5 zabbix 3.0.4 监控MySQL性能
安装mysql [root@test3 /]# yum -y install mysql mysql-server 初始化数据库 [root@test3 /]# /etc/init.d/mysqld ...
- 用phpcms开发模块时中文乱码问题
学着用phpcms开发一个文件管理模块,出现中文乱码,折腾了半天,总结如下 1.自己在mysql客户端建表,默认表格的编码为latin1_swedish_ci,虽然可以建好后用alter命令修改编码, ...
- 【转】AspNetPager分页控件用法
AspNetPager分页控件解决了分页中的很多问题,直接采用该控件进行分页处理,会将繁琐的分页工作变得简单化,下面是我如何使用AspNetPager控件进行分页处理的详细代码: 1.首先到www.w ...
- 深入理解Java虚拟机之读书笔记一 自动内存管理机制
一.运行时数据区域 1.程序计数器是线程的私有空间,每个线程都有.针对线程执行的是Java代码还是Native代码有两种取值,Java代码时:虚拟机字节码指令的地址:Native代码时:计数值为Und ...
- [BZOJ1662][POJ3252]Round Numbers
[POJ3252]Round Numbers 试题描述 The cows, as you know, have no fingers or thumbs and thus are unable to ...