iOS需要學(xué)習(xí)的內(nèi)容
UI
- 基礎(chǔ)控件: UIButton、UIImageView、UILable、UIView乎完、UISlider等
- 高級控件: UITableView、UICollectionView等
- 屏幕適配: Autoresizing品洛、Autolayout囱怕、Sizeclass、Masonry
- 多控制器管理: UINavigationController毫别、UITabBarController娃弓、自定義控制器管理
- Quartz2D、核心動畫岛宦、事件處理台丛、手勢、UIDynamic
多線程網(wǎng)絡(luò)
- NSThread砾肺、NSoperation挽霉、GCD
- Socket、TCP/IP
- 網(wǎng)絡(luò)安全变汪、加密算法侠坎、HTTPS
- NSURLConnection、NSURLSession裙盾、UIWebView
- AFNetWorking实胸、SDWebImage他嫡、MJRefresh、MJExtension
HTML5
- HTML庐完、CSS钢属、JavaScript
- 響應(yīng)式布局、BootStrap门躯、jQuery淆党、jQuery-Mobile
- HTML5 + Native混合開發(fā)
實(shí)用技術(shù)
- plist存儲、NSCoding讶凉、SQLite染乌、CoreData
- 音頻、視頻懂讯、流媒體荷憋、濾鏡處理、拍照域醇、相冊、訊飛語音
- 推送蓉媳、加速計(jì)譬挚、單元測試、靜態(tài)庫酪呻、第三方登錄
- App Extensions减宣、炫酷動畫特效、地圖定位
- 二維碼玩荠、正則表達(dá)式漆腌、打包發(fā)布程序
- 瀑布流、自定義UICollecitonViewLayout
- svn阶冈、git闷尿、github、CocoaPods
- 社交分享女坑、應(yīng)用統(tǒng)計(jì)填具、硬件信息獲取(內(nèi)存匆骗、CPU等)
- 第三方支付劳景、內(nèi)購、通訊錄
UIView的常見是屬性
- 獲得自己的父控件對象
@property(nonatomic,readOnly) UIView *superView;
- 獲得自己的所有子對象
@property(nonatomic,readOnly,copy) NSArray *subviews;
- 控件的標(biāo)識父控件可以通過tag來找到對應(yīng)的子控件
@property(nonatomic)NSInteger tag
- 控件的形變屬性,可設(shè)置旋轉(zhuǎn)角度,比例縮放,平移等屬性
@property(nonatomic)CGAffineTransform transform
- 添加一個(gè)子控件view
- (void)addSubview: (UIView *)view;
- 從父控件中移除
- (void)removeFromSuperView;
- 根據(jù)一個(gè)tag標(biāo)識找出對應(yīng)的控件(一般都是子控件)
- (UIView *)viewWithTag:(NSInteger)tag;
- 控件矩形框在父控件中的位置和尺寸(以父控件左上角為坐標(biāo)原點(diǎn))
@property(nonatomic) CGRect frame;
- 控件矩形框的位置和尺寸(以自己的左上角為坐標(biāo)原點(diǎn),所以bounds的x/y一般為0)
@property(nonatomic) CGRect bounds;
- 控件中心點(diǎn)的位置(以父控件左上角為坐標(biāo)原點(diǎn))
@property(nonatomic) CGPoint center;
UI控件概覽
- UIButton 按鈕 ----監(jiān)聽用戶的點(diǎn)擊,在用戶點(diǎn)擊后做出響應(yīng)
- UILabel 文本標(biāo)簽 ----顯示一串固定的文字
- UITextField 文本輸入框 ----可以彈出鍵盤,讓用戶輸入文本內(nèi)容
- UIImageView 圖片顯示
- UIScrollView 滾動的控件----如果內(nèi)容較多,超出了一個(gè)屏幕的寬度,就用它來顯示
- UITableView 表格----如果每一行顯示的內(nèi)容格式差不多,就用這個(gè)表格控件
- UICollectionView 九宮格----顯示的東西是一格一格的,就用這個(gè)
- UIWebView 網(wǎng)頁顯示控件----使用它就可以在手機(jī)上瀏覽網(wǎng)頁
- UIAlertView 中間彈框----從屏幕中間彈出一個(gè)框,提示用戶下一步怎么做
- UINavigationBar 導(dǎo)航條----顯示在頂部的條
- UIPageControl 分頁控制----能顯示當(dāng)前的頁碼
- UITextView 能滾動的文字顯示控件----文字較多,可以換行,可以編輯
- UIActivityIndicator 圈圈----表示讓用戶等待
- UISwitch 開關(guān)
- UIActionSheet 底部彈框----從屏幕底部彈出一個(gè)框,提示用戶
- UIDatePicker 日期選擇器
- UIToolBar 工具條----一般顯示在底部或者鍵盤頂部,里面有幾個(gè)小按鈕
- UIProgressView 進(jìn)度條----水平進(jìn)度條,如顯示下載進(jìn)度,程序啟動進(jìn)度
- UISlider 滑塊----在兩個(gè)豎直之間滑動選擇,如音量/亮度選擇
- UISegmentControl 選項(xiàng)卡----在幾個(gè)固定選項(xiàng)中進(jìn)行選擇
- UIPickerView 選擇器----在多行數(shù)據(jù)中選擇一行
什么是UIImageView
- UIKit框架提供了很多UI控件,有的不常用,有的非常常用,如:UIButton/UILabel/UIImageView/UITableView等
- UIImageView極其常用,功能比較單一:顯示圖片
什么是UILabel
- UILabel極其常用,功能比較單一:顯示文字
什么是按鈕
- 一般情況下,點(diǎn)擊某個(gè)控件后,會做出相應(yīng)反應(yīng)的都是按鈕
- 按鈕的功能比較多,既能顯示文字,也能顯示圖片,還能隨時(shí)調(diào)整內(nèi)部文字和圖片的位置
按鈕的設(shè)置
UIButton的狀態(tài)
- normal 普通狀態(tài),對應(yīng)的枚舉常量:UIControlStateNormal
- highlighted 高亮狀態(tài),對應(yīng)的枚舉常量:UIControlStateHighlighted
- disabled 失效狀態(tài),對應(yīng)的枚舉常量:UIControlStateDisabled
設(shè)置按鈕的背景圖片
- 設(shè)置按鈕在不同狀態(tài)下的背景圖片(為保證高亮狀態(tài)下的圖片正常顯示,按鈕的style必須為custom)
按鈕的樣式
- 實(shí)際上按鈕自帶了很多不同的樣式
- 在用代碼創(chuàng)建按鈕時(shí)同時(shí)指定按鈕的樣式
UIButton *btn = [UIButton buttonWithType: UIButtonTypeCustom];
UIButtonTypeCustom:無類型,按鈕的內(nèi)容需要自定義
UIButtonTypeDetailDiscloure
UIButtonTypeInfoLight
UIButtonTypeInfoDark
UIButtonTypeContactAdd
UIButton的常見設(shè)置
- 設(shè)置按鈕的文字
-(void)setTitle:(NSString *)title forState:(UIControlState *)state;
- 設(shè)置按鈕文字的顏色
-(void)setTitleColor:(UIColor *)color forState:(UIControlState *)state;
- 設(shè)置按鈕內(nèi)部的小圖片
-(void)setImage:(UIImage *)image forState:(UIControlState *)state;
- 設(shè)置按鈕的背景顏色
-(void)setBackgroundImage:(UIImage *)image forState:(UIControlState *)state;
- 設(shè)置按鈕的文字字體
btn.titleLabel.font = [UIFont systemFontOfSize:13];
- 獲得按鈕的文字
-(NSString *)titleForState:(UIControlState)state;
- 獲得按鈕的文字顏色
-(UIColor *)titleColorForState:(UIControlState)state;
- 獲得按鈕的內(nèi)部小圖片
-(UIImage *)imageForState:(UIControlState)state;
- 獲得按鈕的背景圖片
-(UIImage *)backgroundImageForState:(UIControlState)state;
代碼創(chuàng)建按鈕
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]
[btn setBackgroundImage:[UIImage imageNamed:"btn_01"] forState:UIControlStateNormal]
[btn setTitle:"點(diǎn)我啊" forState:UIControlStateNormal]
[btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal]
九宮格計(jì)算思路
plist文件
什么是plist文件
直接將數(shù)據(jù)寫在代碼里面,不是一種合理的做法,如果數(shù)據(jù)經(jīng)常改動,代碼也就需要經(jīng)常改動,造成代碼的擴(kuò)展性低;
因此,可以考慮將經(jīng)常變動的數(shù)據(jù)放在文件中存儲,程序啟動后從文件中讀取最新的數(shù)據(jù),如果數(shù)據(jù)要變,只需要修改文件,不需要修改代碼;
一般可以使用屬性列表文件存儲NSArray和NSDictionary之類的數(shù)據(jù),這種"屬性列表文件"的擴(kuò)展名是plist,因此稱之為plist文件
創(chuàng)建plist文件
解析plist文件
1.獲得plist文件的全路徑
NSString *path = [[NSBundle MainBundle] pathForResource:@"shops" ofType:@"plist"]
2.加載plist文件
self.shops = [NSArray arrayWithContentOfFile:path];
- plist文件名不能叫做"info""Info"
用模型取代字典的好處
- 使用字典的壞處:一般情況下,設(shè)置數(shù)據(jù)和取出數(shù)據(jù)都要使用"字符串類型key",編寫這些key時(shí),編譯器沒有自動提示,如果寫錯(cuò)了也不會有任何的報(bào)警和錯(cuò)誤
- 使用模型的好處:
1.所謂模型,其實(shí)就是數(shù)據(jù)模型,專門用來存放數(shù)據(jù)的對象,用它來表示數(shù)據(jù)會更加專業(yè)
2.模型設(shè)置數(shù)據(jù)和取出數(shù)據(jù)都是通過它的屬性,編譯器可以監(jiān)測是否正確
3.使用模型訪問屬性時(shí),編譯器會有智能提示,提高代碼書寫效率 - 字典轉(zhuǎn)模型
- 字典轉(zhuǎn)模型的過程最好封裝在模型內(nèi)部
- 模型應(yīng)該提供一個(gè)可以傳入字典參數(shù)的構(gòu)造方法
-(instancetype)initWithDict(NSDictionary *)dict;
+(instancetype)xxxWithDict(NSDcitionary *)dict;
- instancetype
1.instancetype在類型上表示上,跟id一樣,可以表示任何對象類型
2.instancetype只能用在返回值上,不能像id一樣用在參數(shù)類型上
3.instancetype比id多一個(gè)好處,編譯器會監(jiān)測instancetype的真實(shí)類型
view的封裝
- 如果一個(gè)view的內(nèi)部子控件比較多,一般會考慮自定義一個(gè)view,把它內(nèi)部的子控件的創(chuàng)建封裝起來,不讓外界關(guān)心
- 外界可以傳入對應(yīng)的模型給view,view拿到模型后將數(shù)據(jù)展示到響應(yīng)的子控件身上
- 封裝控件的基本步驟
1.在initWithFrame:方法中添加子控件,提供便利構(gòu)造方法
2.在layoutSubviews方法中設(shè)置自控件的frame,一定要調(diào)用父類layoutSubviews
3.增加模型屬性,在模型屬性的set方法中設(shè)置數(shù)據(jù)到子控件上
簡單的MVC
- controller 控制器/大管家
- view 視圖顯示
- model 數(shù)據(jù)模型/數(shù)據(jù)
xib和storyboard的對比
- 共同點(diǎn)
1.都是用來描述軟件界面
2.都用Interface builder工具來編輯
3.本質(zhì)都是轉(zhuǎn)為代碼去創(chuàng)建控件 - 不同點(diǎn)
1.xib是輕量級的,用來描述局部UI界面
2.storyboard是重量級的,用來描述整個(gè)UI界面,并能描述多個(gè)界面之間的跳轉(zhuǎn)關(guān)系
xib的加載
- 方法一
NSArray *views = [[NSBundle MainBundle] loadNibNamed:@"xib name" owner:nil, options: nil]
- 方法二
UINib *nib = [UINib nibWithNibName:@"" bundle: nil]
NSArray *view = [nib instantiateWithOwner:nil options: nil]
使用xib自定義view
- 新建自定義控件類
- 新建xib文件,建議文件名與view的類名一致
- 修改xib中view的類名
- 封裝xib的加載過程
+ (instancetype)shopView
{
return [[[NSBundle MainBundle] loadNibNamed:@"" owner:nil options: nil] lastObject];
}
- 增加模型屬性,在模型屬性的set方法中設(shè)置數(shù)據(jù)到子控件中
- 注意點(diǎn)
- 一個(gè)控件有兩種創(chuàng)建方式
- 通過代碼創(chuàng)建:初始化時(shí)一定會調(diào)用initWithFrame:方法
- 通過xib/storyboard創(chuàng)建
- 初始化時(shí)不會調(diào)用initWithFrame:方法,之后調(diào)用initWithCoder:方法
- 初始化完畢后會調(diào)用awakeFromNib方法
- 有時(shí)候希望在控件初始化的時(shí)候做一些初始化操作,比如添加子控件,設(shè)置基本屬性
- 這時(shí)候需要根據(jù)控件的常見方式來選擇在哪個(gè)方法中操作
UIImage
UIImage *image = [UIImage imageNamed:@""];
UILabel
- UILable的基本設(shè)置
- @property(nonatomic,copy) NSString *text;
- @property(nonatomic,retain) UIFont *font;
- @property(nonatomic,retain) UIColor *textColor;
- @property(nonaotomic) NSTextAlignMent textAlignMent;
UIFont
+(UIFont *)systemFontOfSize:(CGFloat)fontSize;//系統(tǒng)默認(rèn)字體
+(UIFont *)boldSystemFontOfSize:(CGFloat)fontSize;//粗體
+(UIFont *)italicSystemFontOfSize:(CGFloat)fontSize;//斜體
UIButton/UIImageView/UILabel的選擇
- 功能夠用即可,建議不選擇復(fù)雜的控件