UI基礎(chǔ)知識匯總(part 1)
概念部分
代理 / 委托設(shè)計模式
代理設(shè)計模式的場合:
- 當對象A發(fā)生了一些行為, 想告知對象B.(讓對象B成為對象A的代理對象)
- 當對象B想監(jiān)聽對象A的一些行為.(讓對象B成為對象A的代理對象)
- 當對象A無法處理某些事情的時候, 讓對象B幫它處理.(讓對象B成為對象A的代理對象)
- 對象間的傳值
請代理的步驟:
- 寫一個協(xié)議, 把自己不方便(或自己不想)做的事情列出來(@protocol 類名+Delegate <NSObject>)
- 包含進來一個遵守協(xié)議的對象, 對象可以試任意類型(id<類名+Delegate> delegate)
- 自己發(fā)生一些事情想通知代理去做, 就調(diào)用代理對應(yīng)的方法 ( [self.delegate 代理方法: self] )
成為代理的步驟:
- 遵守協(xié)議(<類名+Delegate>)
- 實現(xiàn)協(xié)議里面對應(yīng)的方法(即代理方法)
- (這一點經(jīng)常容易忘, 著重強調(diào)!!)設(shè)置代理的對象, 給代理對象賦值, 建立起兩者之間的代理關(guān)系
使用代理的注意點:
- 協(xié)議的命名規(guī)則: 類名+Delegate
- 一般協(xié)議里的方法都寫成: @optional
- 協(xié)議里方法的命名: *小寫類名開頭+描述這個方法在什么時間或者發(fā)生什么事情調(diào)用, 第一個參數(shù)一般是類自身的對象 (例如: -(void)studentDidReceiveDelivery:(Student )stu;)
代理設(shè)計模式的核心作用就是為了解耦, 解除對象之間的緊耦合性!
代碼部分
UIScrollView
-
設(shè)置UIScrollView當前要滾動的范圍大小
CGSize size = self.imageViewIcon.image.size; self.scrollView.contentSize = size;
-
設(shè)置滾動后內(nèi)容的內(nèi)邊距
self.scrollView.contentInset = UIEdgeInsetsMake(20, 20, 20, 20);
-
設(shè)置初始滾動位置
self.scrollView.contentOffset = CGPointMake(0, -64);
-
設(shè)置offset偏移量進行滾動(帶動畫, 可累加)
CGPoint offset = self.scrollView.contentOffset; offset.x += 100; offset.y += 100; [self.scrollView setContentOffset:offset animated:YES];
-
獲取某個控件的最大Y值
CGFloat btnMaxY = CGRectGetMaxY(self.lastButton.frame);
-
啟動定時器
self.timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(nextImage) userInfo:nil repeats:YES];
-
獲取主線程消息循環(huán), 將定時器加入進去, 更改運行模式,使其能夠同時處理兩個或以上UI事件(默認NSDefaultRunLoopMode運行模式只能同時處理一個UI事件)
[[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
-
關(guān)閉定時器
// 讓當前定時器銷毀 [self.timer invalidate]; // 清空self.timer self.timer = nil;
UIScrollView的代理方法
-
(別忘了!先要遵守協(xié)議<UIScrollViewDelegate>)讓控制器成為scrollView的代理
self.scrollView.delegate = self;
-
此方法是告訴scrollView它的哪個子控件需要進行縮放
-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView { return self.iconImageView; }
-
scrollView即將開始拖拽的時候調(diào)用的方法
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { }
-
scrollView正在滾動時調(diào)用的方法
-(void)scrollViewDidScroll:(UIScrollView *)scrollView { }
-
scrollView停止拖拽的時候調(diào)用的方法
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate { }