UIScrollView------2常见代理使用
2015-10-14 01:03
621 查看
1.常见代理方法
UIScrollView常见代理方法,放大缩小实例讲解实现。
2综合运用,广告Banner
(1)首先加一个UIScrollView,设置320*200,再拖入一个UIPageControl在UIScrollView的上方,并设置当前颜色,和点的个数
代码,1.设置banner的contentSize确定滚动范围 2.将3张图片依次添加到banner中,只需处理x的坐标 3.banner的分页属性设置为YES
效果
此时UIPageControl的点并不会随着图片的拖动变化而变化,要使U点跟着变化
1.实现UIScrollView的-(void)scrollViewDidScroll:(UIScrollView *)scrollView方法
2.在步骤1方法中通过banner的contentOffset获取移动的坐标,知道移动到了那里
3.通过(contentoffset.x + scrollView/2)/scrollView宽度算出页面
很多时候需要我们进行自动滚动,可以通过NSTimer来实现,代码连接https://github.com/gurongkang/TestBanner
swift纯代码实现https://github.com/gurongkang/TestBanner-swift
UIScrollView常见代理方法,放大缩小实例讲解实现。
#import "ViewController.h" @interface ViewController ()<UIScrollViewDelegate> @property (weak, nonatomic) IBOutlet UIScrollView *scrollView; @property (weak, nonatomic) IBOutlet UIImageView *image; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; _scrollView.delegate = self; _scrollView.contentSize = CGSizeMake(1440, 900); //设置放缩的比例 _scrollView.minimumZoomScale = 0.5; _scrollView.maximumZoomScale = 2; } #pragma mark UIScrollViewDelegate -(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{ NSLog(@"用户开始拖拽时调用"); } -(void)scrollViewDidScroll:(UIScrollView *)scrollView{ NSLog(@"具体滚动到某个位置时调用"); NSLog(@"%@",NSStringFromCGPoint(_scrollView.contentOffset)); } -(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{ NSLog(@"停止拖拽时调用"); } -(void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view{ NSLog(@"开始拖动"); } -(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{ return _image; } -(void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale{ NSLog(@"正在拖动"); } @end
2综合运用,广告Banner
(1)首先加一个UIScrollView,设置320*200,再拖入一个UIPageControl在UIScrollView的上方,并设置当前颜色,和点的个数
代码,1.设置banner的contentSize确定滚动范围 2.将3张图片依次添加到banner中,只需处理x的坐标 3.banner的分页属性设置为YES
#import "ViewController.h" @interface ViewController () //滚动栏 @property (weak, nonatomic) IBOutlet UIScrollView *banner; //分页 @property (weak, nonatomic) IBOutlet UIPageControl *pageContrl; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //设置滚动范围 _banner.contentSize = CGSizeMake(320*3, 200); //分页 _banner.pagingEnabled = YES; //隐藏底部指示器 _banner.showsHorizontalScrollIndicator = NO; //初始化图片 并添加到banner中 for(int i=0;i<3;i++){ UIImageView *imageView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:[NSString stringWithFormat:@"image_%d.jpg",i+1]]]; imageView.frame = CGRectMake(i*320, 0, 320, 200); [_banner addSubview:imageView]; } }
效果
此时UIPageControl的点并不会随着图片的拖动变化而变化,要使U点跟着变化
1.实现UIScrollView的-(void)scrollViewDidScroll:(UIScrollView *)scrollView方法
2.在步骤1方法中通过banner的contentOffset获取移动的坐标,知道移动到了那里
3.通过(contentoffset.x + scrollView/2)/scrollView宽度算出页面
#import "ViewController.h" @interface ViewController ()<UIScrollViewDelegate> //滚动栏 @property (weak, nonatomic) IBOutlet UIScrollView *banner; //分页 @property (weak, nonatomic) IBOutlet UIPageControl *pageContrl; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //设置滚动范围 _banner.contentSize = CGSizeMake(320*3, 200); //分页 _banner.pagingEnabled = YES; //隐藏底部指示器 _banner.showsHorizontalScrollIndicator = NO; //初始化图片 并添加到banner中 for(int i=0;i<3;i++){ UIImageView *imageView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:[NSString stringWithFormat:@"image_%d.jpg",i+1]]]; imageView.frame = CGRectMake(i*320, 0, 320, 200); [_banner addSubview:imageView]; } //设置代理 _banner.delegate = self; } #pragma makr UIScrollViewDelegate -(void)scrollViewDidScroll:(UIScrollView *)scrollView{ NSLog(@"正在滚动"); //计算页面 //页码(contentoffset.x + scrollView宽度/2)/scrollView宽度,这里利用UIScrollView分页机制 CGFloat bannerW = _banner.frame.size.width; CGFloat x = _banner.contentOffset.x; //页码 int page = (x + bannerW/2)/bannerW; _pageContrl.currentPage = page; } @end
很多时候需要我们进行自动滚动,可以通过NSTimer来实现,代码连接https://github.com/gurongkang/TestBanner
#import "ViewController.h" @interface ViewController ()<UIScrollViewDelegate> //滚动栏 @property (weak, nonatomic) IBOutlet UIScrollView *banner; //分页 @property (weak, nonatomic) IBOutlet UIPageControl *pageContrl; @end @implementation ViewController{ NSTimer *_timer; } /** * @author 顾荣康, 15-10-16 15:10:47 * * @brief */ - (void)viewDidLoad { [super viewDidLoad]; //设置滚动范围 _banner.contentSize = CGSizeMake(320*3, 200); //分页 _banner.pagingEnabled = YES; //隐藏底部指示器 _banner.showsHorizontalScrollIndicator = NO; //初始化图片 并添加到banner中 for(int i=0;i<3;i++){ UIImageView *imageView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:[NSString stringWithFormat:@"image_%d.jpg",i+1]]]; imageView.frame = CGRectMake(i*320, 0, 320, 200); [_banner addSubview:imageView]; } //设置代理 _banner.delegate = self; //添加定时器 [self addTimer]; } #pragma makr UIScrollViewDelegate /** * @author 顾荣康, 15-10-16 15:10:11 * * @brief 将要开始滚动 * * @param scrollView */ -(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{ [self removeTimer]; } /** * @author 顾荣康, 15-10-16 15:10:55 * * @brief 正在滚动 * * @param scrollView <#scrollView description#> */ -(void)scrollViewDidScroll:(UIScrollView *)scrollView{ NSLog(@"正在滚动"); //计算页面 //页码(contentoffset.x + scrollView宽度/2)/scrollView宽度,这里利用UIScrollView分页机制 CGFloat bannerW = _banner.frame.size.width; CGFloat x = _banner.contentOffset.x; //页码 int page = (x + bannerW/2)/bannerW; _pageContrl.currentPage = page; } /** * @author 顾荣康, 15-10-16 15:10:25 * * @brief 拖拽停止时 * * @param scrollView * @param decelerate */ -(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{ [self addTimer]; } /** * @author 顾荣康, 15-10-16 15:10:08 * * @brief 下一个图片 */ -(void)nextImage{ NSInteger page = self.pageContrl.currentPage; if(page==2){ page = 0; }else{ page++; } _banner.contentOffset = CGPointMake(page*320, 0); } /** * @author 顾荣康, 15-10-16 14:10:51 * * @brief 添加定时器 */ -(void)addTimer{ NSLog(@"添加定时器"); _timer = [NSTimer scheduledTimerWithTimeInterval:3.0 target:self selector:@selector(nextImage) userInfo:nil repeats:YES]; [[NSRunLoop currentRunLoop] addTimer:_timer forMode:NSRunLoopCommonModes]; } /** * @author 顾荣康, 15-10-16 14:10:02 * * @brief 去除定时器 */ -(void)removeTimer{ NSLog(@"去除定时器"); if(_timer!=nil){ [_timer invalidate]; } } @end
swift纯代码实现https://github.com/gurongkang/TestBanner-swift
import UIKit class ViewController: UIViewController,UIScrollViewDelegate { //初始化banner private var banner:UIScrollView = UIScrollView() //UIPageControl private var pageControl = UIPageControl(frame: CGRectMake(20, 180, 100, 20)) private var timer:NSTimer! //MARK: 生命周期 override func loadView() { super.loadView() //设置看见的范围 banner.frame = CGRectMake(0, 0, 320, 200) //设置滚动范围 banner.contentSize = CGSizeMake(320*3, 200) //分页 banner.pagingEnabled = true; //隐藏底部指示器 banner.showsHorizontalScrollIndicator = false; //添加到view self.view.addSubview(banner) //初始化图片 for(var i=0;i<3;i++){ let imageView = UIImageView(image: UIImage(named: "image_\(i+1).jpg")) imageView.frame = CGRectMake(CGFloat(i)*320, 0, 320, 200) banner.addSubview(imageView) } pageControl.currentPage = 0 pageControl.numberOfPages = 3 self.view.addSubview(pageControl) banner.delegate = self; self.addTimer() } override func viewDidLoad() { super.viewDidLoad() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } //MARK:UIScrollViewDelegate /** 开始拖动 - parameter scrollView: */ func scrollViewWillBeginDragging(scrollView: UIScrollView) { self.removeTimer() } func scrollViewDidScroll(scrollView: UIScrollView) { let bannerW = banner.frame.size.width let x = banner.contentOffset.x let page = (x + bannerW/2)/bannerW pageControl.currentPage = Int(page); } func scrollViewDidEndDragging(scrollView: UIScrollView, willDecelerate decelerate: Bool) { self.addTimer() } //MARK:定时器 /** 添加定时器 */ func addTimer(){ print("添加定时器") timer = NSTimer(timeInterval: 1.0, target: self, selector: "nextImage", userInfo: nil, repeats: true) NSRunLoop.currentRunLoop().addTimer(timer, forMode: NSRunLoopCommonModes) } /** 去除定时器 */ func removeTimer(){ print("去除定时器") timer.invalidate() } //MARK: 业务方法 /** 下一张图片 */ func nextImage(){ var page = self.pageControl.currentPage if(page==2){ page = 0 }else{ page++ } banner.contentOffset = CGPointMake(CGFloat(page)*320, 0) } }
相关文章推荐
- 黑马程序员——Gui
- internquestions
- Codeforces#305-C-Soldier and Cards-暴力模拟-deque
- UIButton的contentEdgeInsets等三个属性介绍
- Autolayout的Top Layout guide问题
- 使用Autolayout实现UITableView的Cell动态布局和高度动态改变
- 使用ndk-build编译 android调用的so库
- sb托约束,top layGuide导致总是不能紧贴屏幕上端的问题
- UICollectionViewLayout
- Mysql 升级到 5.6 后插入语句时间字段报错:Incorrect datetime value: '' for column 'createtime'
- SPOJ - QTREE Query on a tree(树剖)
- use of UINT64_C in libavutil/common.h
- Android UI 设计:ListView 控件与 SimpleAdapter 适配器
- UIScrollerView 实现轮播图功能
- iOS- UITextField和UITextView区别
- 【Android UI设计与开发】第08期:底部菜单栏(三)Fragment+FragmentTabHost实现仿新浪微博底部菜单栏
- iOS6新特征:UICollectionView高级使用示例之CircleLayout
- Chapter5-标准I/O库(上)-「APUE读书笔记」
- UICollectionView高级进阶篇
- iOS6新特征:UICollectionView介绍