20代理_滑動視圖UIScrollView_UIPageControl

大綱

一、代理
項目:CustomAlertView0317
1.基本概念
案例:點擊alertView(委托者)上的按鈕啥刻,改變VC1(代理)的背景顏色。alertView通過設(shè)置代理VC1,幫VC1調(diào)用協(xié)議方法changeColor浮禾。
委托者:alertView
代理:VC1
協(xié)議(協(xié)議方法):changeColor

為何協(xié)議方法要在代理中實現(xiàn):其他類可以調(diào)用委托者alertView的協(xié)議(協(xié)議方法),而alertView無法為每個類實現(xiàn)其方法的功能澈歉,所以協(xié)議方法的實現(xiàn)在各個類本身写半。

代理的優(yōu)點:安全(從后往前傳值時)

2.代理
(1)非正式版本(學(xué)習(xí)前奏)
步驟:
①聲明代理vc
②在代理中聲明、實現(xiàn)協(xié)議中的方法
③在委托中調(diào)用
(2)正式版本
步驟:
①聲明代理、協(xié)議方法
②實現(xiàn)協(xié)議方法绊袋、設(shè)置代理
③調(diào)用代理
二毕匀、滑動視圖UIScrollView
項目:UIScrollView0317
步驟:
1.創(chuàng)建Scroll
2.設(shè)置Scroll的內(nèi)容大小,并添加圖片
3.設(shè)置vc的self癌别,為Scroll的delegate
4.在vc實現(xiàn)Scroll中聲明的協(xié)議方法
注:委托者(Scroll)皂岔,代理(vc)。
三展姐、UIPageControl
項目:PageControl0317
步驟:
1.創(chuàng)建并初始化
2.設(shè)置屬性
3.綁定點擊事件

正文

一躁垛、代理
項目:CustomAlertView0317
1.基本概念
案例:點擊alertView上的按鈕,來改變VC1的背景顏色圾笨,委托(alertView)通過設(shè)置代理(VC1教馆,VC1的背景只能由VC1自己設(shè)置),調(diào)用協(xié)議方法(改變背景顏色的方法)擂达,完成相應(yīng)操作土铺。
簡述:點擊按鈕時,alertView(委托)只負責(zé)幫VC1(代理)去調(diào)用協(xié)議方法板鬓。
委托者:alertView
代理:VC1
協(xié)議:協(xié)議方法(改變VC1的背景舒憾,委托者與代理之間的約定)

為何協(xié)議方法要在代理中實現(xiàn):很多類都可以使用委托者alertView的協(xié)議(協(xié)議方法),而alertView不可能去幫助每個類完成各自指定的操作穗熬,所以它將這個任務(wù)交給了各個類本身镀迂。

代理的優(yōu)點:安全(從后往前傳值時)

2.代理
(1)非正式版本(學(xué)習(xí)前奏)
步驟:
①聲明代理vc
②在代理中聲明、實現(xiàn)協(xié)議中的方法
③在委托中調(diào)用

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

 //容器唤蔗,水桶
 @property (nonatomic,retain)ViewController *vc;
②在代理中聲明探遵、實現(xiàn)協(xié)議中的方法
 文件:ViewController.h
 //聲明
 - (void)changeColor;
 文件:ViewController.m
 //實現(xiàn)
 - (void)changeColor{self.view.backgroundColor = [UIColor redColor];}
③在委托中調(diào)用
 文件:MyAlertView.m
 //2.委托者(alertView)幫代理(viewController)調(diào)用協(xié)議方法
    //實際上是代理(viewController)自己調(diào)用
    [self.vc changeColor];

(2)正式版本
步驟:
①聲明代理、協(xié)議方法
②實現(xiàn)協(xié)議方法妓柜、設(shè)置代理
③調(diào)用代理

①聲明代理箱季、協(xié)議方法
在委托者中,聲明代理棍掐、協(xié)議方法
文件:MyAlertView.h

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

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

注意:在@interface @end之外聲明協(xié)議方法
②實現(xiàn)協(xié)議方法藏雏、設(shè)置代理
文件:ViewController.m
(1)在代理類中實現(xiàn)協(xié)議方法、設(shè)置代理

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

(2)將代理對象(vc)賦給委托者的代理屬性

 myAlertView.delegate = self;

③調(diào)用代理
執(zhí)行協(xié)議方法
文件:MyAlertView.m

 [self.delegate changeColor];

注意:
文件:MyAlertView.m

        //如果使用optional描述協(xié)議作煌,一般都要有以下判斷
        //如果使用required描述協(xié)議掘殴,不加判斷
        if ([self.delegate respondsToSelector:@selector(changeColor)])
        {
            //3.調(diào)用代理(正式代理)
            [self.delegate changeColor];
        }

二、滑動視圖UIScrollView
項目:UIScrollView0317
步驟:
1.創(chuàng)建Scroll
2.設(shè)置Scroll的內(nèi)容大小粟誓,并添加圖片
3.設(shè)置vc的self奏寨,為Scroll的delegate
4.在vc實現(xiàn)Scroll中聲明的協(xié)議方法
注:委托者(Scroll),代理(vc)鹰服。

源碼:

@interface ViewController ()<UIScrollViewDelegate>
{
    //速度/當(dāng)前頁
    int _speed,_currentPage;
}
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    //1.創(chuàng)建
    UIScrollView *scrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, SCREEN_BOUNDS.size.width,400)];
    //2.1設(shè)置內(nèi)容大胁⊥(contentSize)
    scrollView.contentSize = CGSizeMake(SCREEN_BOUNDS.size.width * 5, 400);
    //2.2添加圖片內(nèi)容
    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.設(shè)置代理
    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.確定當(dāng)前頁是否為最后一頁
    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.實現(xiàn)scrollView的協(xié)議方法
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
    if (_timer)
    {
        //將要開始拖拽的時候揽咕,關(guān)閉定時器
        [_timer invalidate];
        _timer = nil;
    }
}
//屏幕已經(jīng)停止減速
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    //根據(jù)偏移量,計算當(dāng)前頁
    _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.創(chuàng)建并初始化
2.設(shè)置屬性
3.綁定點擊事件
文件:ViewController.m

- (void)viewDidLoad {
    [super viewDidLoad];
    //1.創(chuàng)建并初始化
    UIPageControl *pageControl = [[UIPageControl alloc]initWithFrame:CGRectMake(100, 200, 100, 30)];
    //2.設(shè)置屬性
    pageControl.numberOfPages = 5;
    pageControl.backgroundColor = [UIColor redColor];
    pageControl.currentPageIndicatorTintColor = [UIColor blackColor];
    pageControl.pageIndicatorTintColor = [UIColor yellowColor];
    //3.綁定點擊事件
    //UIControlEventValueChanged:值發(fā)生改變時觸發(fā)該事件
    [pageControl addTarget:self action:@selector(changeImage:) forControlEvents:UIControlEventValueChanged];
    [self.view addSubview:pageControl];
}
//3.1 實現(xiàn)所綁定的點擊事件
- (void)changeImage:(UIPageControl *)pageControl
{
    NSLog(@"currentPage = %d",pageControl.currentPage);
}

四亲善、實際操作
1.個人信息→設(shè)置姓名
反向傳值(使用代理模式):
步驟:

  1. 聲明代理、協(xié)議方法
  2. 實現(xiàn)協(xié)議方法逗柴、設(shè)置代理
  3. 委托中調(diào)用代理
    2.UIScrollView與PageControl的結(jié)合
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蛹头,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子嚎于,更是在濱河造成了極大的恐慌,老刑警劉巖挟冠,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件于购,死亡現(xiàn)場離奇詭異,居然都是意外死亡知染,警方通過查閱死者的電腦和手機肋僧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來控淡,“玉大人嫌吠,你說我怎么就攤上這事〔籼浚” “怎么了辫诅?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長涧狮。 經(jīng)常有香客問我炕矮,道長,這世上最難降的妖魔是什么者冤? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任肤视,我火速辦了婚禮,結(jié)果婚禮上涉枫,老公的妹妹穿的比我還像新娘邢滑。我一直安慰自己,他們只是感情好愿汰,可當(dāng)我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布困后。 她就那樣靜靜地躺著,像睡著了一般衬廷。 火紅的嫁衣襯著肌膚如雪操灿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天泵督,我揣著相機與錄音趾盐,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛救鲤,可吹牛的內(nèi)容都是我干的久窟。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼本缠,長吁一口氣:“原來是場噩夢啊……” “哼斥扛!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起丹锹,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤稀颁,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后楣黍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體匾灶,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年租漂,在試婚紗的時候發(fā)現(xiàn)自己被綠了阶女。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡哩治,死狀恐怖秃踩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情业筏,我是刑警寧澤憔杨,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站蒜胖,受9級特大地震影響芍秆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜翠勉,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一妖啥、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧对碌,春花似錦荆虱、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至骑脱,卻和暖如春菜枷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背叁丧。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工啤誊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留岳瞭,地道東北人。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓蚊锹,卻偏偏與公主長得像瞳筏,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子牡昆,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,440評論 2 348

推薦閱讀更多精彩內(nèi)容