20代理_滑动视图UIScrollView_UIPageControl

大纲

一、代理
项目:CustomAlertView0317
1.基本概念
案例:点击alertView(委托者)上的按钮,改变VC1(代理)的背景颜色。alertView通过设置代理VC1,帮VC1调用协议方法changeColor。
委托者:alertView
代理:VC1
协议(协议方法):changeColor

为何协议方法要在代理中实现:其他类可以调用委托者alertView的协议(协议方法),而alertView无法为每个类实现其方法的功能,所以协议方法的实现在各个类本身。

代理的优点:安全(从后往前传值时)

2.代理
(1)非正式版本(学习前奏)
步骤:
①声明代理vc
②在代理中声明、实现协议中的方法
③在委托中调用
(2)正式版本
步骤:
①声明代理、协议方法
②实现协议方法、设置代理
③调用代理
二、滑动视图UIScrollView
项目:UIScrollView0317
步骤:
1.创建Scroll
2.设置Scroll的内容大小,并添加图片
3.设置vc的self,为Scroll的delegate
4.在vc实现Scroll中声明的协议方法
注:委托者(Scroll),代理(vc)。
三、UIPageControl
项目:PageControl0317
步骤:
1.创建并初始化
2.设置属性
3.绑定点击事件

正文

一、代理
项目:CustomAlertView0317
1.基本概念
案例:点击alertView上的按钮,来改变VC1的背景颜色,委托(alertView)通过设置代理(VC1,VC1的背景只能由VC1自己设置),调用协议方法(改变背景颜色的方法),完成相应操作。
简述:点击按钮时,alertView(委托)只负责帮VC1(代理)去调用协议方法。
委托者:alertView
代理:VC1
协议:协议方法(改变VC1的背景,委托者与代理之间的约定)

为何协议方法要在代理中实现:很多类都可以使用委托者alertView的协议(协议方法),而alertView不可能去帮助每个类完成各自指定的操作,所以它将这个任务交给了各个类本身。

代理的优点:安全(从后往前传值时)

2.代理
(1)非正式版本(学习前奏)
步骤:
①声明代理vc
②在代理中声明、实现协议中的方法
③在委托中调用

①声明代理vc
文件:MyAlertView.h

 //容器,水桶
 @property (nonatomic,retain)ViewController *vc;
②在代理中声明、实现协议中的方法
 文件:ViewController.h
 //声明
 - (void)changeColor;
 文件:ViewController.m
 //实现
 - (void)changeColor{self.view.backgroundColor = [UIColor redColor];}
③在委托中调用
 文件:MyAlertView.m
 //2.委托者(alertView)帮代理(viewController)调用协议方法
    //实际上是代理(viewController)自己调用
    [self.vc changeColor];

(2)正式版本
步骤:
①声明代理、协议方法
②实现协议方法、设置代理
③调用代理

①声明代理、协议方法
在委托者中,声明代理、协议方法
文件:MyAlertView.h

 @interface MyAlertView : UIView
 @property (nonatomic,assign)id delegate;
 @end

 @protocol MyAlertViewDelegate <NSObject>
 - (void)changeColor;
 @end

注意:在@interface @end之外声明协议方法
②实现协议方法、设置代理
文件:ViewController.m
(1)在代理类中实现协议方法、设置代理

 - (void)changeColor{self.view.backgroundColor = [UIColor redColor];}

(2)将代理对象(vc)赋给委托者的代理属性

 myAlertView.delegate = self;

③调用代理
执行协议方法
文件:MyAlertView.m

 [self.delegate changeColor];

注意:
文件:MyAlertView.m

        //如果使用optional描述协议,一般都要有以下判断
        //如果使用required描述协议,不加判断
        if ([self.delegate respondsToSelector:@selector(changeColor)])
        {
            //3.调用代理(正式代理)
            [self.delegate changeColor];
        }

二、滑动视图UIScrollView
项目:UIScrollView0317
步骤:
1.创建Scroll
2.设置Scroll的内容大小,并添加图片
3.设置vc的self,为Scroll的delegate
4.在vc实现Scroll中声明的协议方法
注:委托者(Scroll),代理(vc)。

源码:

@interface ViewController ()<UIScrollViewDelegate>
{
    //速度/当前页
    int _speed,_currentPage;
}
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    //1.创建
    UIScrollView *scrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, SCREEN_BOUNDS.size.width,400)];
    //2.1设置内容大小(contentSize)
    scrollView.contentSize = CGSizeMake(SCREEN_BOUNDS.size.width * 5, 400);
    //2.2添加图片内容
    for (int i = 0; i < 5; i++)
    {
        UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(i * SCREEN_BOUNDS.size.width, 0, SCREEN_BOUNDS.size.width, 400)];
        imageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"%d.jpg",i]];
        [scrollView addSubview:imageView];
    }
    //3.设置代理
    scrollView.delegate = self;
    //初始速度
    _speed = 1;
    _timer = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(changeImage:) userInfo:scrollView repeats:YES];
    [self.view addSubview:scrollView];
}
//开启定时器
- (void)changeImage:(NSTimer *)timer
{
    UIScrollView *scrollView = timer.userInfo;
    //每次page加1
    //1.确定速度(+1/-1)
    //2.确定当前页是否为最后一页
    if (_currentPage == 0)
    {
        _speed = 1;
    }
    if (_currentPage == 4)
    {
        _speed = -1;
    }
    _currentPage += _speed;
    //3.改变scrollView的偏移量
    [scrollView setContentOffset:CGPointMake(SCREEN_BOUNDS.size.width * _currentPage, 0) animated:YES];
}
#pragma mark 4.实现scrollView的协议方法
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
    if (_timer)
    {
        //将要开始拖拽的时候,关闭定时器
        [_timer invalidate];
        _timer = nil;
    }
}
//屏幕已经停止减速
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    //根据偏移量,计算当前页
    _currentPage = scrollView.contentOffset.x / SCREEN_BOUNDS.size.width;
    if (_timer == nil)
    {
        //开启定时器
        _timer = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(changeImage:) userInfo:scrollView repeats:YES];
    }
}
@end

三、UIPageControl
项目:PageControl0317
步骤:
1.创建并初始化
2.设置属性
3.绑定点击事件
文件:ViewController.m

- (void)viewDidLoad {
    [super viewDidLoad];
    //1.创建并初始化
    UIPageControl *pageControl = [[UIPageControl alloc]initWithFrame:CGRectMake(100, 200, 100, 30)];
    //2.设置属性
    pageControl.numberOfPages = 5;
    pageControl.backgroundColor = [UIColor redColor];
    pageControl.currentPageIndicatorTintColor = [UIColor blackColor];
    pageControl.pageIndicatorTintColor = [UIColor yellowColor];
    //3.绑定点击事件
    //UIControlEventValueChanged:值发生改变时触发该事件
    [pageControl addTarget:self action:@selector(changeImage:) forControlEvents:UIControlEventValueChanged];
    [self.view addSubview:pageControl];
}
//3.1 实现所绑定的点击事件
- (void)changeImage:(UIPageControl *)pageControl
{
    NSLog(@"currentPage = %d",pageControl.currentPage);
}

四、实际操作
1.个人信息→设置姓名
反向传值(使用代理模式):
步骤:

  1. 声明代理、协议方法
  2. 实现协议方法、设置代理
  3. 委托中调用代理
    2.UIScrollView与PageControl的结合
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349

推荐阅读更多精彩内容