UIScrollView------2常见代理使用

1.常见代理方法

UIScrollView常见代理方法,放大缩小实例讲解实现。

 1 #import "ViewController.h"
 2 
 3 @interface ViewController ()<UIScrollViewDelegate>
 4 @property (weak, nonatomic) IBOutlet UIScrollView *scrollView;
 5 @property (weak, nonatomic) IBOutlet UIImageView *image;
 6 
 7 @end
 8 
 9 @implementation ViewController
10 
11 - (void)viewDidLoad {
12     [super viewDidLoad];
13     _scrollView.delegate = self;
14     _scrollView.contentSize = CGSizeMake(1440, 900);
15     //设置放缩的比例
16     _scrollView.minimumZoomScale = 0.5;
17     _scrollView.maximumZoomScale = 2;
18 }
19 
20 #pragma mark UIScrollViewDelegate
21 
22 -(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
23     NSLog(@"用户开始拖拽时调用");
24 }
25 
26 -(void)scrollViewDidScroll:(UIScrollView *)scrollView{
27     NSLog(@"具体滚动到某个位置时调用");
28     NSLog(@"%@",NSStringFromCGPoint(_scrollView.contentOffset));
29 }
30 
31 -(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
32     NSLog(@"停止拖拽时调用");
33 }
34 
35 -(void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view{
36     NSLog(@"开始拖动");
37 }
38 
39 -(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{
40     return _image;
41 }
42 
43 -(void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale{
44     NSLog(@"正在拖动");
45 }
46 
47 @end

2综合运用,广告Banner

(1)首先加一个UIScrollView,设置320*200,再拖入一个UIPageControl在UIScrollView的上方,并设置当前颜色,和点的个数

 

代码,1.设置banner的contentSize确定滚动范围 2.将3张图片依次添加到banner中,只需处理x的坐标 3.banner的分页属性设置为YES

 1 #import "ViewController.h"
 2 
 3 @interface ViewController ()
 4 //滚动栏
 5 @property (weak, nonatomic) IBOutlet UIScrollView *banner;
 6 //分页
 7 @property (weak, nonatomic) IBOutlet UIPageControl *pageContrl;
 8 
 9 @end
10 
11 @implementation ViewController
12 
13 - (void)viewDidLoad {
14     [super viewDidLoad];
15     //设置滚动范围
16     _banner.contentSize = CGSizeMake(320*3, 200);
17     //分页
18     _banner.pagingEnabled = YES;
19     //隐藏底部指示器
20     _banner.showsHorizontalScrollIndicator = NO;
21     //初始化图片 并添加到banner中
22     for(int i=0;i<3;i++){
23         UIImageView *imageView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:[NSString stringWithFormat:@"image_%d.jpg",i+1]]];
24         imageView.frame = CGRectMake(i*320, 0, 320, 200);
25         [_banner addSubview:imageView];
26     }
27 }

效果

此时UIPageControl的点并不会随着图片的拖动变化而变化,要使U点跟着变化

1.实现UIScrollView的-(void)scrollViewDidScroll:(UIScrollView *)scrollView方法

2.在步骤1方法中通过banner的contentOffset获取移动的坐标,知道移动到了那里

3.通过(contentoffset.x + scrollView/2)/scrollView宽度算出页面

 1 #import "ViewController.h"
 2 
 3 @interface ViewController ()<UIScrollViewDelegate>
 4 //滚动栏
 5 @property (weak, nonatomic) IBOutlet UIScrollView *banner;
 6 //分页
 7 @property (weak, nonatomic) IBOutlet UIPageControl *pageContrl;
 8 
 9 @end
10 
11 @implementation ViewController
12 
13 - (void)viewDidLoad {
14     [super viewDidLoad];
15     //设置滚动范围
16     _banner.contentSize = CGSizeMake(320*3, 200);
17     //分页
18     _banner.pagingEnabled = YES;
19     //隐藏底部指示器
20     _banner.showsHorizontalScrollIndicator = NO;
21     //初始化图片 并添加到banner中
22     for(int i=0;i<3;i++){
23         UIImageView *imageView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:[NSString stringWithFormat:@"image_%d.jpg",i+1]]];
24         imageView.frame = CGRectMake(i*320, 0, 320, 200);
25         [_banner addSubview:imageView];
26     }
27     //设置代理
28     _banner.delegate = self;
29 }
30 #pragma makr UIScrollViewDelegate
31 -(void)scrollViewDidScroll:(UIScrollView *)scrollView{
32     NSLog(@"正在滚动");
33     //计算页面
34     //页码(contentoffset.x + scrollView宽度/2)/scrollView宽度,这里利用UIScrollView分页机制
35     CGFloat bannerW = _banner.frame.size.width;
36     CGFloat x = _banner.contentOffset.x;
37     //页码
38     int page = (x + bannerW/2)/bannerW;
39     _pageContrl.currentPage = page;
40 }
41 
42 @end

 很多时候需要我们进行自动滚动,可以通过NSTimer来实现,代码连接https://github.com/gurongkang/TestBanner

  1 #import "ViewController.h"
  2 
  3 @interface ViewController ()<UIScrollViewDelegate>
  4 //滚动栏
  5 @property (weak, nonatomic) IBOutlet UIScrollView *banner;
  6 //分页
  7 @property (weak, nonatomic) IBOutlet UIPageControl *pageContrl;
  8 @end
  9 
 10 @implementation ViewController{
 11     NSTimer *_timer;
 12 }
 13 
 14 /**
 15  *  @author 顾荣康, 15-10-16 15:10:47
 16  *
 17  *  @brief
 18  */
 19 - (void)viewDidLoad {
 20     [super viewDidLoad];
 21     //设置滚动范围
 22     _banner.contentSize = CGSizeMake(320*3, 200);
 23     //分页
 24     _banner.pagingEnabled = YES;
 25     //隐藏底部指示器
 26     _banner.showsHorizontalScrollIndicator = NO;
 27     //初始化图片 并添加到banner中
 28     for(int i=0;i<3;i++){
 29         UIImageView *imageView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:[NSString stringWithFormat:@"image_%d.jpg",i+1]]];
 30         imageView.frame = CGRectMake(i*320, 0, 320, 200);
 31         [_banner addSubview:imageView];
 32     }
 33     //设置代理
 34     _banner.delegate = self;
 35     //添加定时器
 36     [self addTimer];
 37 }
 38 #pragma makr UIScrollViewDelegate
 39 
 40 
 41 /**
 42  *  @author 顾荣康, 15-10-16 15:10:11
 43  *
 44  *  @brief  将要开始滚动
 45  *
 46  *  @param scrollView
 47  */
 48 -(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
 49     [self removeTimer];
 50 }
 51 
 52 /**
 53  *  @author 顾荣康, 15-10-16 15:10:55
 54  *
 55  *  @brief  正在滚动
 56  *
 57  *  @param scrollView <#scrollView description#>
 58  */
 59 -(void)scrollViewDidScroll:(UIScrollView *)scrollView{
 60     NSLog(@"正在滚动");
 61     //计算页面
 62     //页码(contentoffset.x + scrollView宽度/2)/scrollView宽度,这里利用UIScrollView分页机制
 63     CGFloat bannerW = _banner.frame.size.width;
 64     CGFloat x = _banner.contentOffset.x;
 65     //页码
 66     int page = (x + bannerW/2)/bannerW;
 67     _pageContrl.currentPage = page;
 68     
 69 }
 70 
 71 /**
 72  *  @author 顾荣康, 15-10-16 15:10:25
 73  *
 74  *  @brief  拖拽停止时
 75  *
 76  *  @param scrollView
 77  *  @param decelerate
 78  */
 79 -(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
 80     [self addTimer];
 81 }
 82 
 83 /**
 84  *  @author 顾荣康, 15-10-16 15:10:08
 85  *
 86  *  @brief  下一个图片
 87  */
 88 -(void)nextImage{
 89     NSInteger page = self.pageContrl.currentPage;
 90     if(page==2){
 91         page = 0;
 92     }else{
 93         page++;
 94     }
 95     _banner.contentOffset = CGPointMake(page*320, 0);
 96    
 97 }
 98 
 99 /**
100  *  @author 顾荣康, 15-10-16 14:10:51
101  *
102  *  @brief  添加定时器
103  */
104 -(void)addTimer{
105     NSLog(@"添加定时器");
106     _timer = [NSTimer scheduledTimerWithTimeInterval:3.0 target:self selector:@selector(nextImage) userInfo:nil repeats:YES];
107      [[NSRunLoop currentRunLoop] addTimer:_timer forMode:NSRunLoopCommonModes];
108 }
109 
110 /**
111  *  @author 顾荣康, 15-10-16 14:10:02
112  *
113  *  @brief  去除定时器
114  */
115 -(void)removeTimer{
116     NSLog(@"去除定时器");
117     if(_timer!=nil){
118         [_timer invalidate];
119     }
120 }
121 
122 @end

 swift纯代码实现https://github.com/gurongkang/TestBanner-swift

 1 import UIKit
 2 
 3 class ViewController: UIViewController,UIScrollViewDelegate {
 4     
 5     //初始化banner
 6     private var banner:UIScrollView = UIScrollView()
 7     //UIPageControl
 8     private var pageControl = UIPageControl(frame: CGRectMake(20, 180, 100, 20))
 9     private var timer:NSTimer!
10 //MARK: 生命周期
11     override func loadView() {
12         super.loadView()
13         //设置看见的范围
14         banner.frame = CGRectMake(0, 0, 320, 200)
15         //设置滚动范围
16         banner.contentSize = CGSizeMake(320*3, 200)
17         //分页
18         banner.pagingEnabled = true;
19         //隐藏底部指示器
20         banner.showsHorizontalScrollIndicator = false;
21         //添加到view
22         self.view.addSubview(banner)
23         //初始化图片
24         for(var i=0;i<3;i++){
25             let imageView = UIImageView(image: UIImage(named: "image_\(i+1).jpg"))
26             imageView.frame = CGRectMake(CGFloat(i)*320, 0, 320, 200)
27             banner.addSubview(imageView)
28         }
29         pageControl.currentPage = 0
30         pageControl.numberOfPages = 3
31         self.view.addSubview(pageControl)
32         banner.delegate = self;
33         self.addTimer()
34     }
35     
36     override func viewDidLoad() {
37         super.viewDidLoad()
38     }
39 
40     override func didReceiveMemoryWarning() {
41         super.didReceiveMemoryWarning()
42     }
43     
44     
45 //MARK:UIScrollViewDelegate
46     /**
47     开始拖动
48     
49     - parameter scrollView:
50     */
51     func scrollViewWillBeginDragging(scrollView: UIScrollView) {
52         self.removeTimer()
53     }
54     
55     func scrollViewDidScroll(scrollView: UIScrollView) {
56         let bannerW = banner.frame.size.width
57         let x = banner.contentOffset.x
58         let page = (x + bannerW/2)/bannerW
59         pageControl.currentPage = Int(page);
60     }
61     
62     func scrollViewDidEndDragging(scrollView: UIScrollView, willDecelerate decelerate: Bool) {
63         self.addTimer()
64     }
65     
66 //MARK:定时器
67     /**
68     添加定时器
69     */
70     func addTimer(){
71        print("添加定时器")
72         timer = NSTimer(timeInterval: 1.0, target: self, selector: "nextImage", userInfo: nil, repeats: true)
73         NSRunLoop.currentRunLoop().addTimer(timer, forMode: NSRunLoopCommonModes)
74     }
75     
76     /**
77     去除定时器
78     */
79     func removeTimer(){
80         print("去除定时器")
81         timer.invalidate()
82     }
83 //MARK: 业务方法
84     /**
85     下一张图片
86     */
87     func nextImage(){
88         var page = self.pageControl.currentPage
89         if(page==2){
90             page = 0
91         }else{
92             page++
93         }
94         banner.contentOffset = CGPointMake(CGFloat(page)*320, 0)
95     }
96 }

 

转载于:https://www.cnblogs.com/gurongkang/p/4876304.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值