图片轮播器
来源:互联网 发布:windows phone10虚拟机 编辑:程序博客网 时间:2024/06/06 04:13
只添加三个UIImageView 到UIScrollView中,通过对上一张、当前、下一张的图片切换来完成滚动。
将定时器加到forMode:NSRunLoopCommonModes 来保证及时正在滑动uitableview也能保证图片轮播器的正常定时滚动
先看到下面的图片
源代码如下,附件是整个工程所需的代码和图片资源。
//
// ViewController.m
// 图片轮播器
//
// Created by wusiping on 15/12/3.
// Copyright (c) 2015年 wusiping. All rights reserved.
//
#import "ViewController.h"
@interface ViewController ()<UIScrollViewDelegate>
@property(nonatomic,weak)UIScrollView *scrollView;
@property(nonatomic,weak)UIPageControl *pageControl;
@property(nonatomic,weak)UIImageView *preImageView;
@property(nonatomic,weak)UIImageView *currentImageView;
@property(nonatomic,weak)UIImageView *nextImageView;
@property(nonatomic,strong)NSArray *imageArray;
@property(nonatomic,assign)BOOL isDragging;
@end
@implementation ViewController
- (void)viewDidLoad {
[superviewDidLoad];
_isDragging = NO;
[selfsetUpImageArray];
[selfsetUpScrollView];
[selfsetUpPageControl];
[selfsetUpImageView];
[self timer];
}
//初始化图片数组
- (void)setUpImageArray
{
NSArray *array = [[NSArrayalloc]initWithObjects:@"img_01",@"img_02",@"img_03",@"img_04",@"img_05",nil];
_imageArray = array;
}
//初始化滚动视图
- (void)setUpScrollView
{
UIScrollView *scrollView = [[UIScrollViewalloc]init];
CGFloat scrollViewX = 0;
CGFloat scrollViewY = 20;
CGFloat scrollViewW = [UIScreenmainScreen].bounds.size.width;
CGFloat scrollViewH = [UIScreenmainScreen].bounds.size.height *2/6;
CGRect scrollViewF = CGRectMake(scrollViewX, scrollViewY, scrollViewW, scrollViewH);
scrollView.frame = scrollViewF;
scrollView.backgroundColor = [UIColorredColor];
scrollView.contentSize = CGSizeMake(scrollViewW * 3, 0 );
scrollView.pagingEnabled = YES;
scrollView.contentOffset = CGPointMake(scrollViewW , 0);
_scrollView = scrollView;
_scrollView.delegate =self;
[self.viewaddSubview:_scrollView];
}
//添加上一张图片、当前图片、下一张图片到滚动图
- (void)setUpImageView
{
CGFloat imageViewY = 0;
CGFloat imageViewW = [UIScreenmainScreen].bounds.size.width;
CGFloat imageViewH = self.scrollView.frame.size.height;
//前一张
UIImageView *preImageView = [[UIImageViewalloc]initWithImage:[UIImageimageNamed:_imageArray[_imageArray.count -1] ]];
CGFloat preImageViewX = 0;
CGRect preImageViewF = CGRectMake(preImageViewX, imageViewY, imageViewW, imageViewH);
preImageView.frame = preImageViewF;
_preImageView = preImageView;
[self.scrollViewaddSubview:_preImageView];
//当前图片
UIImageView *currentImageView = [[UIImageViewalloc]initWithImage:[UIImageimageNamed:_imageArray[0]]];
CGFloat currentImageViewX = imageViewW;
CGRect currentImageViewF = CGRectMake(currentImageViewX, imageViewY, imageViewW, imageViewH);
currentImageView.frame = currentImageViewF;
_currentImageView = currentImageView;
[self.scrollViewaddSubview:_currentImageView];
//后一张图片
UIImageView *nextImageView = [[UIImageViewalloc]initWithImage:[UIImageimageNamed:_imageArray[1]]];
CGFloat nextImageViewX = imageViewW * 2;
CGRect nextImageViewF = CGRectMake(nextImageViewX, imageViewY, imageViewW, imageViewH);
nextImageView.frame = nextImageViewF;
_nextImageView = nextImageView;
[self.scrollViewaddSubview:_nextImageView];
}
//初始化分页控制器
- (void)setUpPageControl
{
UIPageControl *pageControl = [[UIPageControlalloc]init];
CGFloat pageControlX = 0;
CGFloat pageControlW = 100;
CGFloat pageControlH = 30;
CGFloat pageControlY = CGRectGetMaxY(self.scrollView.frame) - pageControlH;
CGRect pageControlF = CGRectMake(pageControlX, pageControlY, pageControlW, pageControlH);
pageControl.frame = pageControlF;
pageControl.numberOfPages = _imageArray.count;
pageControl.currentPage = 0;
self.pageControl = pageControl;
[self.viewaddSubview:_pageControl];
}
//定时器
- (void)timer
{
NSTimer *time = [NSTimerscheduledTimerWithTimeInterval:2.0target:selfselector:@selector(nextImage:)userInfo:nilrepeats:YES];
[[ NSRunLoopcurrentRunLoop] addTimer:timeforMode:NSRunLoopCommonModes];
}
- (void)nextImage:(BOOL)isDragging
{
if (_isDragging ==YES) {
return;
}else{
CGPoint offset = self.scrollView.contentOffset;
offset.x += offset.x;
[self.scrollViewsetContentOffset:offset animated:YES];
}
}
#pragma 滚动图的代理方法
//在此方法中,不断更新上一张、当前、下一张图片
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
static int i =0;
NSLog(@" i等于 %d",i);
self.pageControl.currentPage = i;
CGFloat offset =self.scrollView.contentOffset.x;
UIImage *nextImage = [UIImageimageNamed:_imageArray[i ==_imageArray.count -1 ? 0 : i +1]];
_nextImageView.image = nextImage;
UIImage *preImage = [UIImageimageNamed:_imageArray[i ==0 ? _imageArray.count -1 : i - 1]];
_preImageView.image = preImage;
if (offset == 0 ) {
_currentImageView.image =_preImageView.image;
if (i == 0) {
i = _imageArray.count -1;
}
else
i --;
self.scrollView.contentOffset =CGPointMake([UIScreenmainScreen].bounds.size.width,0);
}else if(offset == [UIScreenmainScreen].bounds.size.width *2)
{
_currentImageView.image =_nextImageView.image;
if (i == _imageArray.count -1) {
i = 0;
}
else
i ++;
self.scrollView.contentOffset =CGPointMake([UIScreenmainScreen].bounds.size.width,0);
}
}
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
_isDragging = YES;
NSLog(@"开始拖拽");
}
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
_isDragging = NO;
NSLog(@"结束拖拽");
}
@end
- 图片轮播器
- 图片轮播器
- 图片轮播器
- 图片轮播器
- 图片轮播器
- 图片轮播器
- 图片轮播器
- 一个JS图片轮播器
- JS 图片轮播器
- 图片轮播器[ScrollView,PageControl]
- swift:无限图片轮播器
- IOS_图片轮播器实现
- 无限图片轮播器
- 无限循环 图片轮播器
- 图片轮播器 部分自用
- iOS 图片轮播器
- JavaScript实现图片轮播器
- iOS中的图片轮播器
- Python yield 官方详解(基于2.x)
- js原生创建封装ajax的方法,附XMLHttpRequest状态码
- ListView和Gridview设置setOnItemClickListener无效解决方案
- LeetCode 171 Excel Sheet Column Number
- android button设计模拟器
- 图片轮播器
- 启动 asmca 时出现 No protocol specified 错误的解决办法
- Jquery 工具类函数
- gnuradio模块的数据输出
- linux程序开机自启动的方法详解
- 如何解决在HttpURLConnection的getInputStream方法调用时出错的问题
- use c to send file using http post
- 解决"The server quit without updating PID file."
- spring mvc使用Servlet3异步要注意的几个问题