GeekBand~iOS~開發(fā)高級進階~第一周

工程管理

從源碼到App
從源碼到App.png
工程涉及的概念.png

Workspace
管理一組Project,這些項目將使用同一個位置:保存項目狀態(tài);保存構造出來的產(chǎn)品;自動可以互相引用(implicit dependency),Xcode自動為獨立的項目提供Workspace,Workspace里的Project仍可獨立打開

Project
組織工程用到的文件,管理構建目標( Target),告訴Xcode當前構建和執(zhí)行目標(通過Scheme選擇)

Folder Reference里的文件不在工程里
Project文件管理的風格:并無一定規(guī)則。按類型分組或按模塊分組;與文件目錄對應 或全部放在一個目錄里。

Target
定義如何構造一個產(chǎn)品。指定用到的文件子集;定義依賴關系;提供構建過程的規(guī)則與參數(shù)。

Scheme 與Destination
Scheme:一組指令。在指定目標上完成特定任務。
Destination:告訴Xcode使用哪個設備或模擬器。

靜態(tài)庫與框架
static library(.a)
dynamic library(.dylib)
framework(.framework)
命令行工具
xcode-select:選擇Xcode默認版本
xcodebuild:
查看幫助:$ xcodebuild -help,或者隨便輸入一個不存在的選項:$ xcodebuild -fuck
查看用法:$ xcodebuild -usage
查看已安裝 sdk 列表:$ xcodebuild -showsdks
查看當前 Xcode 版本:$ xcodebuild -version
查看 xcodebuild 目錄:$ xcode-select -print-path
查看項目配置:$ xcodebuild -showBuildSettings
編譯項目:$ xcodebuild
xcrun
clang,swift/swfitc
ld
nm
libtool/ranlib
lipo
otool

第三方模塊管理工具
CocoaPods , Carthage
CocoaPods:
安裝:

$ sudo gem install cocoapods
$ pod init

定義:在項目根目錄下編寫 Podfile
使用:

$ pod install --no-repo-update

View層次結構與屬性

UIView表示屏幕上一塊矩形區(qū)域;負責提供相應區(qū)域的顯示內(nèi)容,也處理相應區(qū)域的事件響應。
UIWindow
Window代表當前應用可用的屏幕區(qū)域
UIApplicationMain 或 appDelegate創(chuàng)建,保存到delegate.window里,makeVisibleAndKey顯示

[[UIApplication sharedApplication] keyWindow];

.windowLevel >= UIWindowLevelStatusBar 會顯示在狀態(tài)欄前面
UIView的層次管理方法
增:

- (void)addSubview:(UIView *)view
- (void)insertSubview:(UIView *) atIndex:(NSInteger)
- (void)insertSubview:(UIView *) belowSubview:(UIView *)
- (void)insertSubview:(UIView *) aboveSubview:(UIView *)

刪:

- (void)removeFromSuperview

改:

- (void)bringSubviewToFront:(UIView *)view
- (void)sendSubviewToBack:(UIView *)view
- (void)exchangeSubviewAtIndex:(NSInteger) index1
                    withSubviewAtIndex:(NSInteger) index2

查:

.window
.superview
.subviews
- (BOOL)isDescendantOfView:(UIView *)

事件處理--Event

Events:objects ,sent to an app, informing user actions

事件分發(fā)過程:

事件分發(fā)過程.png

NSRunLoop:線程附屬對象,監(jiān)聽一組事件源。
NSRunLoop的主要作用:控制NSRunLoop里面線程的執(zhí)行和休眠,在有事情做的時候使當前NSRunLoop控制的線程工作,沒有事情做讓當前NSRunLoop的控制的線程休眠。
NSRunLoop 就是一直在循環(huán)檢測,從線程start到線程end,檢測inputsource(如點擊,雙擊等操作)同步事件,檢測timesource同步事件,檢測到輸入源會執(zhí)行處理函數(shù),首先會產(chǎn)生通知,corefunction向線程添加runloop observers來監(jiān)聽事件,意在監(jiān)聽事件發(fā)生時來做處理。
runloopmode是一個集合,包括監(jiān)聽:事件源,定時器,以及需通知的runloop observers 模式包括:
default模式:幾乎包括所有輸入源(除NSConnection) NSDefaultRunLoopMode模式
mode模式:處理modal panels
connection模式:處理NSConnection事件,屬于系統(tǒng)內(nèi)部,用戶基本不用
event tracking模式:如組件拖動輸入源 UITrackingRunLoopModes 不處理定時事件
common modes模式:NSRunLoopCommonModes 這是一組可配置的通用模式。將input sources與該模式關聯(lián)則同時也將input sources與該組中的其它模式進行了關聯(lián)。

每次運行一個run loop,你指定(顯式或隱式)run loop的運行模式。當相應的模式傳遞給run loop時,只有與該模式對應的 input sources才被監(jiān)控并允許run loop對事件進行處理(與此類似,也只有與該模式對應的observers才會被通知
UIResponder定義事件響應組件的接口,提供基礎實現(xiàn)。

UIResponder.png

Responder Chain
Responder串成一個鏈條:.nextResponder
First Responder: .isFirstResponder

Hit-Test找到最可能響應觸摸事件的View
觸摸點在哪個View里?

-[UIView hitTest:(CGPoint) withEvent:(UIEvent*)]
-[UIView pointInside:withEvent:]

遞歸詢問每個pointInside為YES 的subview
pointInside為NO的subview子樹整個略過

觸摸事件
iOS支持多點觸摸
view.multipleTouchEnabled

手勢操作--gesture

觸摸手勢:按照特定規(guī)律出現(xiàn)的一系列觸摸事件
常見手勢:Tap,Swipe,Double tap,Long press,Pinch,Two finger tap,Rotate
觸摸手勢實現(xiàn)的原理:
收集一系列的UITouch;分析是否符合所需要的規(guī)律。如果符合,觸發(fā)手勢響應;否則,作為普通觸摸事件響應。

同時支持多種手勢:
用依賴關系改變觸發(fā)順序

-[a requireGestureRecognizerToFail:b]

b失敗之前,a先等著
用UIGestureRecognizerDelegate控制

-gestureRecognizer:shouldReceiveTouch:

UIScrollView

創(chuàng)建UIScrollView
-在Interface Builder 里拖
-在代碼里創(chuàng)建

scrollView = [[UIScrollView alloc] initWithFrame:rect];

UIScrollView的尺寸
設定方法:
-用代碼指定.contentSize
-使用Autolayout,constraints要能推算出 contentSize

圖示.png

UIScrollView的滾動
BOOL scrollEnabled;
BOOL bounces;
BOOL showsHorizontalScrollIndicator;
BOOL showsVerticalScrollIndicator;

圖示1.png

監(jiān)聽滾動情況:
->scrollView.delegate
-->UIScrollViewDelegate

- scrollViewWillBeginDragging:(UIScrollView *);
- scrollViewDidScroll:(UIScrollView *);
- scrollViewDidEndDragging:(UIScrollView *) willDecelerate:(BOOL);

Pinch響應
->UIScrollViewDelegate
-->- (UIView *)viewForZoomingInScrollView:(UIScrollView *)
-->-scrollViewDidEndZooming:withView:atScale:
-->.minimumZoomScale
-->.maximumZoomScale
->UIScrollView
-->-setZoomScale:(CGFloat) animated:(BOOL)
-->-zoomToRect:(CGRect) animated:(BOOL)
分頁滾動
->.pageEnabled
頁面來源
一個巨大的view,簡單,費資源
每頁一個view,delegate -scrollViewDidScroll:

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,117評論 6 537
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,860評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,128評論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,291評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,025評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,421評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,477評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,642評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,177評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,970評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,157評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,717評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,410評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,821評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,053評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,896評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,157評論 2 375

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