UIScrollView实现图片轮播

UIScrollView实现图片轮播

- (UIScrollView
*)scrollView

{

{

if (_scrollView
==
nil) {

_scrollView = [[UIScrollView
alloc]
initWithFrame:CGRectMake(10,
20,
300,
130)];

_scrollView.backgroundColor
= [UIColor
redColor];

[self.view
addSubview:_scrollView];

//
取消弹簧效果

_scrollView.bounces
=
NO;

//
取消水平滚动条

_scrollView.showsHorizontalScrollIndicator
=
NO;

_scrollView.showsVerticalScrollIndicator
=
NO;

//
要分页

_scrollView.pagingEnabled
=
YES;

// contentSize

_scrollView.contentSize
=
CGSizeMake(kImageCount
*
_scrollView.bounds.size.width,
0);

//
设置代理

_scrollView.delegate
=
self;

}

return
_scrollView;

}

- (UIPageControl
*)pageControl

{

if (_pageControl
==
nil) {

//
分页控件,本质上和scrollView没有任何关系,是两个独立的控件

_pageControl = [[UIPageControl
alloc]
init];

//
总页数

_pageControl.numberOfPages
=
kImageCount;

//
控件尺寸

CGSize size = [_pageControl
sizeForNumberOfPages:kImageCount];

_pageControl.bounds
=
CGRectMake(0,
0, size.width,
size.height);

_pageControl.center
=
CGPointMake(self.view.center.x,
130);

//
设置颜色

_pageControl.pageIndicatorTintColor
= [UIColor
redColor];

_pageControl.currentPageIndicatorTintColor
= [UIColor
blackColor];

[self.view
addSubview:_pageControl];

//
添加监听方法

/**
在OC中,绝大多数"控件",都可以监听UIControlEventValueChanged事件,button除外"
*/

[_pageControl
addTarget:self
action:@selector(pageChanged:)
forControlEvents:UIControlEventValueChanged];

}

return
_pageControl;

}

//
分页控件的监听方法

- (void)pageChanged:(UIPageControl
*)page

{

NSLog(@"%d", page.currentPage);

//
根据页数,调整滚动视图中的图片位置
contentOffset

CGFloat x = page.currentPage
*
self.scrollView.bounds.size.width;

[self.scrollView
setContentOffset:CGPointMake(x,
0)
animated:YES];

}

//
视图加载完成调用,通常用来设置数据

- (void)viewDidLoad

{

[super
viewDidLoad];

//
设置图片

for (int
i =
0; i <
kImageCount; i++) {

NSString *imageName = [NSString
stringWithFormat:@"img_%02d",
i +
1];

UIImage *image = [UIImage
imageNamed:imageName];

UIImageView *imageView = [[UIImageView
alloc]
initWithFrame:self.scrollView.bounds];

imageView.image
= image;

[self.scrollView
addSubview:imageView];

}

//
计算imageView的位置

[self.scrollView.subviews
enumerateObjectsUsingBlock:^(UIImageView
*imageView,
NSUInteger idx,

BOOL *stop) {

//
调整x => origin => frame

CGRect frame = imageView.frame;

frame.origin.x
= idx * frame.size.width;

imageView.frame
= frame;

}];

//
分页初始页数为0

self.pageControl.currentPage
=
0;

//
启动时钟

[self
startTimer];

}

- (void)startTimer

{

self.timer
= [NSTimer
timerWithTimeInterval:2.0
target:self
selector:@selector(updateTimer)
userInfo:nil
repeats:YES];

//
添加到运行循环

[[NSRunLoop
currentRunLoop]
addTimer:self.timer
forMode:NSRunLoopCommonModes];

}

- (void)updateTimer

{

//
页号发生变化

// (当前的页数
+ 1) %
总页数

int page = (self.pageControl.currentPage
+
1) %
kImageCount;

self.pageControl.currentPage
= page;

NSLog(@"%d",

self.pageControl.currentPage);

//
调用监听方法,让滚动视图滚动

[self
pageChanged:self.pageControl];

}

#pragma mark - ScrollView的代理方法

//
滚动视图停下来,修改页面控件的小点(页数)

- (void)scrollViewDidEndDecelerating:(UIScrollView
*)scrollView

{

//
停下来的当前页数

NSLog(@"%@",
NSStringFromCGPoint(scrollView.contentOffset));

//
计算页数

int page = scrollView.contentOffset.x
/ scrollView.bounds.size.width;

self.pageControl.currentPage
= page;

}

/**

修改时钟所在的运行循环的模式后,抓不住图片

解决方法:抓住图片时,停止时钟,送售后,开启时钟

*/

- (void)scrollViewWillBeginDragging:(UIScrollView
*)scrollView

{

NSLog(@"%s", __func__);

//
停止时钟,停止之后就不能再使用,如果要启用时钟,需要重新实例化

[self.timer
invalidate];

}

- (void)scrollViewDidEndDragging:(UIScrollView
*)scrollView willDecelerate:(BOOL)decelerate

{

NSLog(@"%s", __func__);

[self
startTimer];

}

时间: 2024-12-14 07:35:01

UIScrollView实现图片轮播的相关文章

UIScrollView实现图片轮播器及其无限循环效果

图片轮播器: 一.实现效果 实现图片的自动轮播            二.实现代码 storyboard中布局 代码: 1 #import "YYViewController.h" 2 3 @interface YYViewController () <UIScrollViewDelegate> 4 @property (weak, nonatomic) IBOutlet UIScrollView *scrollview; 5 /** 6 * 页码 7 */ 8 @prop

IOS 05 UIScrollView介绍 图片轮播器

移动设备的屏幕?大?小是极其有限的,因此直接展?示在?用户眼前的内容也相当有限 当展?示的内容较多,超出?一个屏幕时,?用户可通过滚动?手势来查看屏幕以外的内容 普通的UIView不具备滚动功能,不能显?示过多的内容 UIScrollView是?一个能够滚动的视图控件,可以?用来展?示?大量的内容,并且可以通过滚 动查看所有的内容 在IOS中UIScrollView这个控件还是比较常用和重要的. 很多时候,我们想在UIScrollView正在滚动 或 滚动到某个位置 或者 停?止滚动 时做?一些

iOS控件封装-(UIScrollView)图片轮播器

首先看一下效果吧: 文件一:PictureCarouselView.h import define SELF_WIDTH self.scrollView.frame.size.width define SELF_HEIGHT self.scrollView.frame.size.height import "PictureCarouselView.h" @interface PictureCarouselView() @property (weak, nonatomic) IBOutl

UISCrollView —— 图片轮播器实现(三)——(第二讲)

1. 所用知识点 1> UIScrollView的基本属性,和UIPageControl设置,还有就是要用到NSTimer来定时实现UIScrollView的图片轮播 2> NSTimer简单介绍: 2.1  NSTimer叫做“定时器”,它的作用如下 * 在指定的时间执行指定的任务 * 每隔一段时间执行指定的任务 2.2  NSTimer简单使用: 1> 调用下面的方法就会开启一个定时任务 + (NSTimer *)scheduledTimerWithTimeInterval:(NST

Swift基础 - - StoryBoard间切换与UIScrollView控件实现图片轮播

界面切换 在项目中可以把耦合度比较高的界面放在通过一个StoryBoard中,可以按照功能使用多个StoryBoard搭建界面,这样便于项目维护以及多人开发,对于多个StoryBoard间切换,可以使用以下代码: @IBAction func ChangeOne(sender: UIButton) { var oneStoryBoard:UIStoryboard = UIStoryboard(name: "One", bundle: NSBundle.mainBundle()) let

iOS开发项目实战——Swift实现图片轮播与浏览

最近开始开发一个新的iOS应用,自己决定使用Swift,进行了几天之后,发现了一个很严峻的问题,那就是不管是书籍,还是网络资源,关于Swift的实在是太少了,随便一搜全都是OC实现某某某功能.就算是找到Swift的资源,一看,大概是半年前的代码,或是一年前的代码,一运行,全都报错.这是由于毕竟Swift还是在不断发展完善当中,随着Swift2.0的开源以来,包括发布Swift这一年多以来,Swift的改动还是很大的,很多的接口或是语法前后有较大差异.有些功能只能自己硬生生看官方文档或挤破脑子想,

UISCrollView —— 图片轮播器封装实现(三)——(第三讲)

1.分析 利用xib布局,然后自定义一个UIView,解析xib,然后利用控制器传入数据,将其加载到控制器的view上展示即可 2. 程序结构 3. 代码具体实现 1>  xib文件 2>  创建类 XMGPageView,然后将其与xib文件关联,选中xib文件,然后设置下文中 " custom class " 为定义的类,让其来管理xib 1>    (如图,设置xib与类关联) 2>  XMGPageView.h 文件中,声明分页图片数组属性,及其一个快速

【转】 iOS开发UI篇—UIScrollView控件实现图片轮播

原文:http://www.cnblogs.com/wendingding/p/3763527.html iOS开发UI篇—UIScrollView控件实现图片轮播 一.实现效果 实现图片的自动轮播            二.实现代码 storyboard中布局 代码: 1 #import "YYViewController.h" 2 3 @interface YYViewController () <UIScrollViewDelegate> 4 @property (w

图片轮播逻辑

// //  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 UIScro