以前iOS的筆記---純手打(1)

*7月8日上午

N:Block :跟一個(gè)函數(shù)塊差不多,會(huì)對(duì)里面所有的內(nèi)容的引用計(jì)數(shù)+1,想要解決就用__block或__weak給其重新命名一遍

寫的方法 (1)Bolck 的實(shí)現(xiàn):返回值(^名字)(形式參數(shù)……)=^返回值(實(shí)參……){代碼饺窿,有返回值的話就返回};

(2)Block的回調(diào):名字(需要導(dǎo)入的實(shí)參……);

7月8日下午

在類里的#improt”類名”下創(chuàng)建Block

typded返回值(^代號(hào))(形式參數(shù)……)寝优;

將代號(hào)變?yōu)閷傩圆⒅匦旅鹻 代號(hào) *任意名字}

并在方法中建立屬性的block[需要重新命名,也可以用原始的代號(hào)創(chuàng)建]

7月11日上午

破壞封裝性—KVO的建立:(1)要使被觀察屬性的值產(chǎn)生變化

(2)創(chuàng)建監(jiān)視者:[被檢查者 addObserver:監(jiān)察者 forKeyPath:@“被檢查者的屬性” options:NSKeyValueObservingOptionNew(Old) context:nil];

(3)監(jiān)視者方法-o開頭的:-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{

NSLog(@"da");

if ([[change objectForKey:@"new"]isEqualToString:@"60"]) {

_children.hunger=100;

}

}

(4)銷毀監(jiān)視的屬型[lei屬性 removeObserver:self forKey:@“被檢查的屬性” context:nil]狐史;

KVO與委托模式的相同點(diǎn):都可以進(jìn)行事件的通信痒给,數(shù)值的傳遞,

不同點(diǎn):KVO是一對(duì)多预皇,委托是一對(duì)一的

N:一般采用—通知:(1)創(chuàng)建通知中心:[[NSNotificationCenter defaultCenter]postNotificationName:發(fā)出的屬性 object:self userInfo:添加的數(shù)據(jù)]侈玄;

(2)接收通知中心的屬性:[[NSNotificationCenter defaultCenter]addObseerver:self selector:@selector(調(diào)用的方法:) name:@“接受的屬性” object:nil];

(3)通知中心調(diào)用的通知方法:【是通知不是通知中心】:-(void)方法名:(NSNotification *)名字{

名字.usinfo;中取值

}吟温;

(4)銷毀通知:在dealloc方法里[[NSNotificationCenter defaultCenter]removeObserver:self name:@“要銷戶的屬性” object:nil];

7月11日下午


N:謂詞:提供了一個(gè)NSPredicate類,指定過濾器的條件。將符合條件的對(duì)象保留下來,可以來取出滿足條件的對(duì)象突颊;

條件:就是屬性—>

*a—>最后一個(gè)符=a的鲁豪;

a*—>第一個(gè)=a;

*a*—>中間有一個(gè)a;

*a?—>倒數(shù)2個(gè)是a律秃;

爬橡?a—>第2個(gè)是a;

屬性 in{‘屬性名’}—>取出特定屬性名的對(duì)象

也可以去取或—>||,與—>棒动,非—>!

*代表了任意的字符,糙申?代表一個(gè)字符;

也可以通過<,>,=來取出符合條件的對(duì)象船惨;

柜裸、事例—>

NSPerdicate *perdicate=[NSPerdicate perdicateWithFormat:@“條件”];

NSArray *arr=[總數(shù)組 filteredArrayUsingPredicate:perdicate];

for(Person *p in arr){

NSLog(@“%@”,p);

}

7月12日上午

N:時(shí)間

NSDate *date=[NSDate date];得出來的是格林尼治時(shí)間 0時(shí)區(qū)

NSTimerInterval time1970(只是名字)=[date timeIntervalSince1970];時(shí)間戳:通過時(shí)間戳(timeIntervalSince1970)來獲得現(xiàn)在到1970年的秒數(shù)

也可以通過時(shí)間戳的秒數(shù)來加上需要的秒數(shù)得到時(shí)間NSDate=[NSDate dateWithTimeIntervalSinceNow:8 * 60 *60];

格式化日期——>NSDateFormatter *f=[[NSDateFormatter alloc]init];

[f setDateFormatter:@“yyyy年M月d日 H:m:ss”];

NSString *s=[f stringFormDate:date];

NSLog(@“%@”,s);

N:沙盒:一個(gè)App里只能有一個(gè)沙盒,沙盒只能允許唯一的App訪問粱锐,保障了用戶的安全疙挺;

沙盒具有3個(gè)文件:(1)Library:用于保存系統(tǒng)文件,(2)Documents:存放永久文件怜浅,如備份等铐然;(3)Tmp:存放臨時(shí)文件蔬崩,重啟App后清空!

N:獲取沙盒路徑:NSString *s=NSHomerDirectory();

7月12日下午

N:字符串路徑:NSString *path=@“/User/whbe/Desktop/ADP-187.torrent”;

NSArray *arr=[path pathComponents];pathComponents用于獲取每一步的路徑

NSString *Lastpath=[path lastPathComponents];獲取最后的路徑

N拼接路徑(追加文件)

追加文件擴(kuò)展名:NSString *newpath2=[newpath stringByAppendingPathExtension@“”]

刪除最后文件:NSString *newpath3=[newpath2 stringByDeletingLastPathComponent];

刪除文件擴(kuò)展名:NSString *newpath4=[newpath2 stringByDeletingPathExtension];

N:文件管理:用于創(chuàng)建或刪除文件的搀暑;

創(chuàng)建文件管理器(具有單例沥阳,也就是唯一性):NSFileManager *manager=[NSFileManager defaulitManager];

創(chuàng)建路徑地址:NSString *pata=[NSHomDirectory stringByAppendingPathComponent:@“路徑”];

創(chuàng)建文件的字符:NSString *neirong=@“內(nèi)容”;

創(chuàng)建內(nèi)容:NSData *data=[neirong dataUsingEncoding:NSUTF8StringEncoding(UTF8的字符)];

創(chuàng)建文件:BOOL is1=[manager createFileAtpath:pata(地址路徑) contents:data(內(nèi)容) attributes:nil];

檢驗(yàn)是否創(chuàng)建:NSLog(@“%d”,is1);

創(chuàng)建復(fù)制的路徑地址:NSString *pata2=[NSHomDirectory stringByAppendingPathComponent:@“路徑”];

復(fù)制文件:BOOL is2=[manager copyltemAtPath:path(原地址) toPath:pata2(需要復(fù)制到的地址) error:nil];

檢驗(yàn)是否復(fù)制:NSLog(@“%d”,is2);

創(chuàng)建剪切的路徑地址:NSString *pata3=[NSHomDirectory stringByAppendingPathComponent:@“路徑”];

剪切文件:BOOL is3=[manager moveitemAtPath:pata2(剪切前的) toPath:pata3(剪切后的) error:nil];

接受文件的內(nèi)容:(1)NSData *data2=[manager contentsAtPath:pata3];從文件管理器中接受

(2)NSString *ner=[[NSString alloc]initWithData:data2(接受的內(nèi)容) encoding:NSUTF8StringEncoding(轉(zhuǎn)變代碼 )];

查找文件是否存在:BOOL is4=[manager fileExistsAtPath:pata3(文件地址)];

刪除文件:BOOL is5=[manager removeltemAtPath:path3(刪除文件的地址) error:nil];

7月13日上午

N:?jiǎn)卫?.單例主要適用于存儲(chǔ)一些公共的數(shù)據(jù)自点,每一個(gè)對(duì)象都可以進(jìn)行共享訪問沪袭、修改2.如果有類的對(duì)象的創(chuàng)建非常消耗性能,這樣的類也可以設(shè)計(jì)成單例類樟氢,只創(chuàng)建一次對(duì)象來節(jié)省性能

例如:通知\文件管理器都是單例冈绊,只能有一個(gè)存在,就算再創(chuàng)建一個(gè)埠啃,還是原來的那一個(gè)死宣;

單例的創(chuàng)建:(1)在類里創(chuàng)建方法(以+(instancetype)share……;為例!)

(2)方法的實(shí)現(xiàn):【1】在方法外創(chuàng)建以 static 類名 *名字=nil碴开;在方法里 if(名字==nil){

名字=[[self alloc]init];

return 名字毅该;

}

(3)在main.h文件里用類方法創(chuàng)建;

單例的創(chuàng)建:+ (instancetype)shareButton {

static ZAButton * btn = nil;

static dispatch_once_t onceToken;

dispatch_once(&onceToken, ^{

btn = [[self alloc] init];

});

return btn;

}

7月14日下午

如何從數(shù)據(jù)中獲取信息:注:在這里所有的引用都是強(qiáng)引用Strong潦牛,不是Weak(1)在xcode中創(chuàng)建一個(gè)空白的文件,將文件內(nèi)容復(fù)制粘貼

(2)寫出在程序中寫出文件的路徑 :NSString *path=[[NsBundle mainBundle]pathForResource:@“路徑” ofType:nil];

(3)創(chuàng)建內(nèi)容:NSData *data=[NSData dataWithContentsOfFile: path(文件名)];

(4)從文件中獲取字典[解析.json文件]:NSDictionary *resultDic=[NSJSONSerialization JSONObjectWithData:data(獲取內(nèi)容)options:NSJSONReadingMutableContainers error:nil];

(5)獲取字典中的數(shù)組:NSArray *resultArr=resultDic[@“鍵”]眶掌;

(6)創(chuàng)建一個(gè)強(qiáng)引用的可變數(shù)組來接受對(duì)象的類并先給強(qiáng)引用的數(shù)組內(nèi)賦給個(gè)數(shù):#import "Model.h"

@interface ViewController ()

@property(nonatomic,strong)NSMutableArray *dataArr;

@end

self.dataArr = [NSMutableArray arrayWithCapacity:resultArr.count];

(7)遍歷resultArr中的字典取出數(shù)組中的字典巴碗,輸入鍵為你所需要的字典取出字典朴爬,將字典構(gòu)造成對(duì)象,并將對(duì)象放入dataArr里:for (NSDictionary *contentDic in resultArr) {

//取出所有的subject字典

NSDictionary *subjectDic = contentDic[@"subject"];

//將字典構(gòu)造成了Model對(duì)象

Model *m1 = [[Model alloc] initWithDictionary:subjectDic];

//將所有的Model對(duì)象放入dataArr

[self.dataArr addObject:m1];

}

(8)從可變數(shù)組_dataArr中取出你所需要的信息橡淆;

全文如下:

ViewController.h文件

#import "ViewController.h"

#import "Model.h"

@interface ViewController ()

@property(nonatomic,strong)NSMutableArray *dataArr;

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

NSString *path = [[NSBundle mainBundle] pathForResource:@"su_.json" ofType:nil];

//2.讀取JSON文件召噩,序列化JSON的數(shù)據(jù)容器

NSData *data = [NSData dataWithContentsOfFile:path];

NSDictionary *resultDic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];

NSLog(@"resultDic = %@", resultDic);

//3.獲取到了subjects數(shù)組

NSArray *resultArr = resultDic[@"subjects"];

self.dataArr = [NSMutableArray arrayWithCapacity:resultArr.count];

//遍歷resultArr數(shù)組的字典

for (NSDictionary *contentDic in resultArr) {

//取出所有的subject字典

NSDictionary *subjectDic = contentDic[@"subject"];

//將字典構(gòu)造成了Model對(duì)象

Model *m1 = [[Model alloc] initWithDictionary:subjectDic];

//將所有的Model對(duì)象放入dataArr

[self.dataArr addObject:m1];

}

NSLog(@"%@",_dataArr);

//從Model里面取出數(shù)據(jù)

Model *m2 = _dataArr[0];

NSString *title = m2.title;

NSLog(@"%@", title);

for (Model *m in _dataArr) {

NSLog(@"%@",m.title);

}

// Do any additional setup after loading the view, typically from a nib.

}

- (void)didReceiveMemoryWarning {

[super didReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

@end

Model.h文件

#import

@interface Model : NSObject

@property(nonatomic,strong)NSString *title;

@property(nonatomic,strong)NSString *year;

@property(nonatomic,strong)NSDictionary *images;

-(instancetype)initWithDictionary:(NSDictionary *)dic;

@end

Model.m文件

#import "Model.h"

@implementation Model

-(instancetype)initWithDictionary:(NSDictionary *)dic{

self=[super init];

if (self) {

self.year=dic[@"year"];

self.title=dic[@"title"];

self.images=dic[@"images"];

}

return self;

}

@end

7月17日下午

UI第一課

UIUserInterface(用戶界面)

1.iOS系統(tǒng)版本,每年都有更新.對(duì)我們開發(fā)者而言,主要的是觀察API的變化.

2.iPhone新手機(jī)發(fā)布,會(huì)產(chǎn)生不同尺寸的屏幕,現(xiàn)在市面上有4種尺寸,我們需要考慮屏幕適配問題.

3.iOS系統(tǒng)層級(jí),分為4層.目前我們學(xué)習(xí)的就是最頂層Cocoa touch層(layer),我們使用的是UIKit框架

4.iOS SDK(軟件開發(fā)工具包).iOS開發(fā)語言O(shè)C,Swift——都是面向?qū)ο?

5.我們最簡(jiǎn)單的創(chuàng)建UI項(xiàng)目的方法就是通過storyboard(故事版)來完成.

6.我們可以通過設(shè)置故事板上面的控件屬性(右邊欄,第四個(gè)按鈕——屬性設(shè)置)

7.

—模擬器的輸入模式切換:command+shift+K

—模擬器大小的切換:command+1,2,3

—模擬器鎖屏:command+L

—模擬器Home鍵:command+shift+H

infoQ網(wǎng)站

www.stackOverFlow.com

github.com

cocoaChina.com

code4app.com

編程查資料最好用Google

素材

http://www.58pic.com/shiliangtu/14288360.html

http://588ku.com/beijing/0-29-dnum-0-5/

7月19日

1.與其配套的合成app圖標(biāo)的軟件是Prepo;

2.今天講的:(1)在蘋果手機(jī)里逸爵,坐標(biāo)以左上角為原點(diǎn)具滴;

(2)在文件創(chuàng)建UILable,并且設(shè)定位置: UILable *lable=[UILable alloc]initWithFrame:CGRectMake(X,Y,視圖的寬width,視圖的高h(yuǎn)eight);

3.程序的生命周期AppDelegate.m方法:(1)程序完成啟動(dòng),- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions—?jiǎng)?chuàng)建Xcode工程選中singleView模板师倔,并且做好相應(yīng)設(shè)置构韵,設(shè)置好主窗口,和主窗口的根控制器趋艘。相當(dāng)于該方法隱藏的設(shè)置好了上述疲恢。;

(2)程序?qū)⒁M(jìn)入前臺(tái)- (void)applicationWillEnterForeground:(UIApplication *)application

(3)程序已經(jīng)變?yōu)榛钴S:-(void)applicationDidBecomeActive:(UIApplication *)application —-1.在程序啟動(dòng)的時(shí)候會(huì)調(diào)用一次致稀。2.從后臺(tái)回到前臺(tái)3.從任務(wù)管理界面回到前臺(tái)冈闭;

(4)程序?qū)⒁o去活躍狀態(tài)(進(jìn)入非活躍狀態(tài))- (void)applicationWillResignActive:(UIApplication *)application程序不再是用戶可以操作的時(shí)候,進(jìn)入非活躍(雙擊Home鍵)暫停游戲(在這里暫停一些任務(wù))抖单;

(5)3.程序已經(jīng)進(jìn)入后臺(tái)- (void)applicationDidEnterBackground:(UIApplication *)application—程序完全看不見了萎攒,進(jìn)入后臺(tái)遇八。程序掛(2)程序由用戶自己結(jié)束的時(shí)候,先進(jìn)入后臺(tái)耍休;

(6)6.程序?qū)⒁Y(jié)束- (void)applicationWillTerminate:(UIApplication *)application—// 程序結(jié)束的時(shí)候 程序自己崩潰的時(shí)候如果時(shí)機(jī)合適刃永,你可以做一些數(shù)據(jù)儲(chǔ)存類的工作;

(7程序接受到內(nèi)存警告(系統(tǒng)發(fā)送羊精,如果一直占用過高斯够,系統(tǒng)會(huì)直接殺掉進(jìn)程)- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {

NSLog(@"收到內(nèi)存警告");

})

7月20日

UIwindow:是窗口,UIwindow繼承于UIView喧锦,但是卻可以容納UIView

UIView:是視圖的基類读规,UIView(父視圖)里也可以許多UIView(子視圖),

獲取屏幕的尺寸:CGRect rect=[UIScreen mainScreen].bounds;

創(chuàng)建一個(gè)窗口并應(yīng)用在屏幕上的步驟:(1).創(chuàng)建窗口self.window=[[UIwindow alloc]init];

(2).將窗口添加并設(shè)置成主要:[self.window makeKeyAndVisible];

(3).給窗口設(shè)置一個(gè)窗口管理者:self.window.rootViewController=[[ViewCentroller alloc]init];

Frame:以父視圖為起點(diǎn)有CGRectMake(x,y,width,height)燃少;

Bounds:只有大小沒有起點(diǎn)CGRectMake(0,0,width,height)束亏;

Center:表示視圖中心點(diǎn)CGPiont(x,y);

7月22日

UIView:可以添加到UIWindow里—》 [self.window addSubview: View(name)];

NSBundle:是代碼在運(yùn)行時(shí)的一個(gè)包,里面包含了你所需要的數(shù)據(jù)(圖片)

如何添加View.xib視圖在window里和獲取NSBunble里的數(shù)據(jù):(1).創(chuàng)建一個(gè)NSBunble:NSBunble *bubDle=[NSBunble mainBunble];

(2).用數(shù)組來接受NSBunble中的東西:NSArray *DArray=[bunDle loadNiNamed:@“文件的名字”owner:self(處于的文件) options:nil(添加的內(nèi)容)]阵具;

(3).創(chuàng)建個(gè)UIView用于接收數(shù)組中的View:UIView *View=DArray[0];

(4).將View添加到window里:[self.window addSubview:View];

雜項(xiàng):(1).tag值:是一個(gè)標(biāo)簽碍遍,代表了擁有這個(gè)標(biāo)簽的View或其他的東西;(也可以用來或取【1】UIView *Aview=[self.view viewWithTag:tag的值])

(2)hidden:是一個(gè)視圖是否隱藏阳液;(view.hidden=YES或NO怕敬,默認(rèn)的是NO);

(3)alpha:是一個(gè)視圖的透明度;(view.alpha=1;默認(rèn)是1帘皿,可自行修改)东跪;

(4)UIbutton里面無論是設(shè)置什么都是用set開頭

(5)當(dāng)用通知或別的東西傳遞類與類之間的數(shù)據(jù)時(shí),應(yīng)觀察視圖是否已經(jīng)構(gòu)建(是構(gòu)建不是創(chuàng)建)好矮烹!

注:?實(shí)現(xiàn)一個(gè)單例

//開頭為share或者default

+ (instancetype)shareViewController {

//在初始化時(shí)越庇,將vc設(shè)為nil

static ViewController * vc = nil;

//判斷vc是否存在,決定是否進(jìn)行初始化操作奉狈,因?yàn)関c使用static修飾,所以vc == nil判斷只會(huì)成立一次

if (vc == nil) {

vc = [[ViewController alloc] init];

}

return vc;

}

簡(jiǎn)述導(dǎo)航控制器內(nèi)部實(shí)現(xiàn)機(jī)制

導(dǎo)航控制器是一個(gè)視圖控制器的管家涩惑,并不負(fù)責(zé)進(jìn)行界面的顯示仁期,只對(duì)所有的子控制器進(jìn)行管理。導(dǎo)航控制器在進(jìn)行push和pop操作時(shí)竭恬,push是將控制器放入導(dǎo)航控制器中進(jìn)行管理跛蛋,pop是講控制器移出導(dǎo)航控制器,并且進(jìn)行釋放痊硕。在棧模型中赊级,分別對(duì)應(yīng)入棧(壓棧)和出棧(彈棧)操作。一般來說導(dǎo)航控制器和標(biāo)簽欄控制器還有視圖控制器共同組成三級(jí)控制器結(jié)構(gòu)岔绸,導(dǎo)航控制器作為標(biāo)簽欄控制器的視圖控制器之一理逊,視圖控制器作為導(dǎo)航欄控制器的根視圖控制器

簡(jiǎn)述UITableViewCell的復(fù)用機(jī)制

UITableViewCell使用復(fù)用時(shí)有兩種方法橡伞,兩種方法都是在需求單元格時(shí)去復(fù)用池中尋找相同類型(通過復(fù)用Identifier)的單元格,如果單元格在復(fù)用池有存在一個(gè)或多個(gè)晋被,就可以直接取出進(jìn)行復(fù)用兑徘。如果沒有,方法內(nèi)部會(huì)自動(dòng)進(jìn)行創(chuàng)建羡洛。在使用新的復(fù)用方法時(shí)挂脑,一定要先注冊(cè)單元格,才能夠進(jìn)行復(fù)用欲侮。

7月23日

圖片導(dǎo)入:(1)UIImageView *imageView=[[UIImageView alloc]init];

(2)imageView.image=[UIImage imageNamed:@“圖片的名字.格式”];

圖片的拉伸方法:

-(UIImage *)outUIImage:(NSString *)Name{

UIImage *image=[UIImage imageNamed:Name];

image=[image resizableImageWithCapInsets:UIEdgeInsetsMake(0, 110, 0, 110)];(上左下右)

return image;

}

UI動(dòng)畫制作:

(1).旋轉(zhuǎn)動(dòng)畫方法:[UIView animateWithDuration:1(調(diào)用時(shí)間) animation:^{View.transform=CGAffineTransformRotate(View.transform,M_PI==180*C(M_PI_2==90*C,M_PI_4==45*C轉(zhuǎn)換的角度))}completion:^(BOOL finished){(當(dāng)動(dòng)畫運(yùn)行完后應(yīng)該運(yùn)行什么)}] 崭闲;

(2)平移動(dòng)畫方法:[UIView animateWithDuration:1(調(diào)用時(shí)間) animation:^{View(改變的視圖后的.transform).transform=CGAffineTransformScale(View(改變的視圖前的.transform).transform,輸入x(橫移的X),上升下降的y(上升下降的y))}completion:^(BOOL finished){(當(dāng)動(dòng)畫運(yùn)行完后應(yīng)該運(yùn)行什么)}] ;

(3)縮放動(dòng)畫方法:[UIView animateWithDuration:1(調(diào)用時(shí)間) animation:^{View.transform=CGAffineTransformScale:(View.transform,x軸縮小放大的度(比例是1:x)威蕉,y軸縮小放大的度(1:y))}]

(4)回歸原始形態(tài):[UIView animateWithDuration:1 animation:^{View.transform=CGAffineTransformIdentity;}];

View顏色的多次改變:(1).建立一個(gè)顏色的可變數(shù)組刁俭,再建立一個(gè)UIView的可變數(shù)組

(2)利用for循環(huán)并且將顏色數(shù)組或UIViwe數(shù)組里的顏色或View相互交換

例:[UIView animateWithDuration:1 animations:^{

for (int u=0 ;u<7 ;u++) {

UIView *Vie=_Array[u];

Vie.backgroundColor=_colorArray[6-u];

//[_Array exchangeObjectAtIndex:0 withObjectAtIndex:u];

[_colorArray exchangeObjectAtIndex:6withObjectAtIndex:u ];

}

} completion:^(BOOL finished) {

}];

7月24日

UIlable的各種方法:(1)創(chuàng)建:UILabel * textLabel = [[UILabel alloc]init]];

(2)內(nèi)容:textLable.text=@“內(nèi)容”;

(3)行數(shù):textLable.numbberOfLines=0;[等于o時(shí)代表不限制行數(shù)]

(4)字體的大小設(shè)置:text.font=[UIFont systemFontOfSize:字號(hào)]忘伞;(也可以在Sys前bold,可變粗體)

(5)根據(jù)label寬度調(diào)整字體:textLabel.adjustFontSizeToFitWidth=YES;

(6)根據(jù)字體設(shè)置Label尺寸:[textLabel sizeToFit];

(7)設(shè)置文本陰影:textLabel.shadowColor=[UIColor redColor];顏色————textLabel.shadowOffset=CGSizeMake(5,5);—偏移

(8)UILable具有高亮模式:

(9) 讓字體適應(yīng)label的大斜〕帷:self.label.adjustsFontSizeToFitWidth = YES;

UIImageView的各種方法:(1)創(chuàng)建一個(gè)UIImageView:UIImageView *imageView=[UIImageView alloc]initWithFrame:CGRectMake(尺寸);

(2)給imageView添加圖片:imageView.image=[UIImage imageNamed:@“圖片的名字”];

(3)設(shè)置視圖的內(nèi)容格式:imageView.contentMode=UIViewContentModeCenter;(UIViewContentModeScaleToFill拉伸鋪滿視圖,不在乎圖像比例

UIViewContentModeScaleAspectFit自適應(yīng)拉伸氓奈,不破壞寬高比翘魄,如果寬/高沾滿視圖,另外一邊不再進(jìn)行縮放

UIViewContentModeScaleAspectFill不破壞寬高比舀奶,可以超出視圖范圍)

(4)裁剪圖片需要設(shè)置的半徑:imageView.layer.cornerRadius=150暑竟;圖片的半徑切割后可為圓形

(5)是否進(jìn)行切割:imageView.clipsToBounds=YES;

(6)UIImageView也具有高亮模式;

連貫的圖片動(dòng)畫制作:(1)將需要的圖片添加到Xcode里育勺。

(2)[創(chuàng)建一個(gè)UIImageView的屬性]但荤,并且在方法里創(chuàng)建一次(否則UIImageView為空)@property (nonatomic, strong) UIImageView * animationView;

self.animationView = [[UIImageView alloc] initWithFrame:CGRectMake(50, 50, 300, 300)];

(3)[創(chuàng)建一個(gè)可變數(shù)組并將圖片轉(zhuǎn)化為UIImage并添加到數(shù)組]中去:NSMutableArray *imagesArray=[NSMutableArray array];

for(int i=1;i<圖片個(gè)數(shù)+1;i++){

NSString *iamgeName=[NSStringstringWithFormat:@“圖片的名字%d”,i];

UIImage *image=[UIImage iamgeNamed:imageName];

[imagesArray addObject:image];

}

(4)[給動(dòng)畫設(shè)置屬性時(shí)一定要在創(chuàng)建視圖后設(shè)置,否則無法設(shè)置]涧至;

(5)將[數(shù)組里的圖片傳給視圖的動(dòng)畫數(shù)組]:self.animationView.anmationImaege=imagesArray;

(6)將animationView添加到self.view:[self.view addSubview:_animationView];

(7)設(shè)置每張圖畫的時(shí)常:self.animationView.animationDuration=…;默認(rèn)的是0.1秒腹躁;

(8)重復(fù)次數(shù):self.animationView.animationRepeatCount=…;默認(rèn)是無限

(9)開始動(dòng)畫:[self.animationView starAnimation];

(10)關(guān)閉動(dòng)畫:[self.animationView stopAnimating];

7月25日

UIControl:是具有事件處理控件的父類;

UIControl繼承與UIView所以UIControl可以添加事件南蓬,并且可以簽訂協(xié)議纺非,而且還可以comder的鍵去取出它的方法;

UIButton的狀態(tài):(1)正常狀態(tài):UIControlStateNolmal

(2)高亮:UIControlStateHighlighted

(3)禁用:UIControlStateDisabled

(4)選中:UIControlStateSelected

UIButton的方法:(1)添加標(biāo)題:[butten setTitle:@“標(biāo)題名” forState:狀態(tài)]赘方;

(2)添加標(biāo)題的顏色:[butten setTitleColor:[UIColor redcolor] forState:狀態(tài)]烧颖;

(3)添加圖片:[butten setImage:[UIImage imageName:@“圖片名字”] forState:狀態(tài)];

(4)添加背景圖片:[butten setBackgroundImage:[UIImage imageName:@“名字”] forState:狀態(tài)];

(5)設(shè)置標(biāo)題字體:butten.titleLabel.font=[UIFont systemFontOfSize:大小]窄陡;

(6)添加方法事件:[butten addTarget:self action:@selector(方法名) forControEvents:UIControlEvenTouchUpInside(觸發(fā)狀態(tài))];

(7)

UITextField:文本輸入框

(1)鍵盤類型:text.keyboardType=UIKeyBoardTypeDefault;

(2)外框風(fēng)格:text.borderStyle=UITextBorderStyleRounderdRect;(UITextBorderStyleNone,UITextBorderStyleLine,UITextBorderStyleBezel,UITextBorderStyleRoundedRect)

(3)內(nèi)容大锌换础:text.font=[UIFont systemFontOfSize:大小];

(4)內(nèi)容格式:text.textAlignment=NSTextAligenmentCenter;

(5)提示輸入:text.placeholder=@“提示”;

(6)清除格式:text.clearButtonMode=UITextFiedViewModeUnlessEditing;(UITextFieldViewModeNever,------永遠(yuǎn)不出現(xiàn),UITextFieldViewModeWhileEditing,------當(dāng)編輯的時(shí)候出現(xiàn),UITextFieldViewModeUnlessEditing-----當(dāng)結(jié)束編輯時(shí)出現(xiàn),UITextFieldViewModeAlways-----一直出現(xiàn))

(7)是否支持清除:text.clearsOnbeginEditing=YES;

(8)是否支持安全輸入:text.secureTextEntry=YES;

(9)設(shè)置鍵盤右下角的Return格式:text.returnKeyType=UIReturnKeyDone;

(10)給輸入框添加動(dòng)作:[text addTarget:self action:@selector(方法名) forControlEvents:UIControlEventEditingDidBegin];

(11)給輸入框添加代理:text.delegate=self;

(12)text的委托方法實(shí)例:// return NO to disallow editing.

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {

NSLog(@"將要開始編輯");

return YES;

}

// became first responder

- (void)textFieldDidBeginEditing:(UITextField *)textField {

NSLog(@"已經(jīng)開始編輯");

}

// return YES to allow editing to stop and to resign first responder status. NO to disallow the editing session to end

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField {

NSLog(@"將要結(jié)束編輯");

return YES;

}

// may be called if forced even if shouldEndEditing returns NO (e.g. view removed from window) or endEditing:YES called

- (void)textFieldDidEndEditing:(UITextField *)textField {

NSLog(@"已經(jīng)結(jié)束編輯");

}

// return NO to not change text

// 獲取輸入框的狀態(tài)跳夭,并且決定是否繼續(xù)編輯

// 輸入框?qū)⒁薷牡膬?nèi)容

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

// 新內(nèi)容所在的位置---長(zhǎng)度為0

NSLog(@"range :%@", NSStringFromRange(range));

// 新輸入的內(nèi)容

NSLog(@"string :%@", string);

if (range.location <= 10) {

return YES;

}

// 如果返回NO的話涂圆,字符內(nèi)容不發(fā)生變化们镜。依然會(huì)接受

return NO;

}

// called when clear button pressed. return NO to ignore (no notifications)

- (BOOL)textFieldShouldClear:(UITextField *)textField {

return YES;

}

// called when 'return' key pressed. return NO to ignore.

- (BOOL)textFieldShouldReturn:(UITextField *)textField {

// 模擬應(yīng)用效果

// 用戶點(diǎn)擊返回按鈕,收起鍵盤/發(fā)送消息

[textField resignFirstResponder];

NSLog(@"%@", textField.text);

return YES;

}

7月26日

UISlider:是滑塊

(1)滑塊的最大值:slider.maximumValue=1000乘综;

(2)滑塊的最小值:slider.minimumValue=0憎账;

(3)滑塊的Value:是可以直接修改滑動(dòng)的進(jìn)度條

(4)可以給滑塊的左右和滑塊設(shè)置圖片或顏色:[slider setMinimumTrackTintColor:[UIColor greenColor]];

[slider setThumbImage:[UIImage imageNamed:@"playing_slider_thumb@2x"] forState:UIControlStateNormal];

(5)也可以添加方法!

8月01日

UIViewController:視圖控制器

視圖不是直接添加在window視圖卡辰,而是添加在根視圖控制器上(rootViewController)

(1)如何添加視圖控制器:方法:(1)創(chuàng)建一個(gè)繼承與UIViewController的類并且點(diǎn)擊創(chuàng)建頁面的(Also create XIB file)按鈕胞皱,導(dǎo)入到AppDelegate.m文件,并初始化然后賦予self.window.rootViewController

方法:(2)創(chuàng)建一個(gè)繼承與UIViewController的類九妈,并創(chuàng)建一個(gè)View文件反砌,將文件的與類綁定身份并且將(1).選中file's owner ,身份設(shè)置為指定的控制器

*(2).連線到view視圖上

擬態(tài)視圖:擬態(tài)視圖不能自己顯示到視圖上萌朱,只能通過按鈕宴树,擬態(tài)視圖關(guān)閉后就會(huì)被程序清除內(nèi)存,不會(huì)保存原來的數(shù)據(jù)

(1)創(chuàng)建一個(gè)繼承與UIViewController的類晶疼,并創(chuàng)建一個(gè)按鈕給其添加方法

(2)在按鈕的方法中,類進(jìn)行init: ZAViewController *za=[[ZAViewController alloc]init];

(3)并且進(jìn)行構(gòu)建視圖:[self presentViewController:za( 類名的簡(jiǎn)稱)animated:YES(是否有動(dòng)畫) completion:^{創(chuàng)建完視圖后回調(diào)什么}]酒贬;

關(guān)閉擬態(tài)視圖:通過按鈕來關(guān)閉:(1)[self dismissViewVontrolerAnimated:YES completion:^{}];

// UIModalTransitionStyleCoverVertical垂直彈出

//UIModalTransitionStyleFlipHorizontal水平翻轉(zhuǎn)

//UIModalTransitionStyleCrossDissolve漸入漸出

//UIModalTransitionStylePartialCurl豎直翻頁

擬態(tài)視圖的模式:modalVC.modalTransitionStyle = UIModalTransitionStylePartialCurl;注:寫在擬態(tài)視圖創(chuàng)建前

8月02日

在UI模式下數(shù)據(jù)的傳輸:(1)基本的數(shù)據(jù)傳輸:①.在Main.stroyboard中創(chuàng)建兩個(gè)View,一個(gè)是主一個(gè)是輔

②.UIStroyboard的創(chuàng)建: UIStroyboard *sb=[[UIStroyboard alloc]init];

③.取出輔視圖:UIViewController * Vie=[sb instantiateViewControllerWithIdentifier:(輔視圖的id)]翠霍;

④.進(jìn)行構(gòu)建視圖:[self presentViewController:Vie(視圖控制器)animated:YES(是否有動(dòng)畫) completion:^{創(chuàng)建完視圖后回調(diào)什么}]锭吨;注:也可以通過UIStroyboad獲取各種視圖

(2)代理:①創(chuàng)建一個(gè)協(xié)議:@protocol ZAWdelegate 創(chuàng)建協(xié)議

-(void)stringWithText:(NSString *)string;協(xié)議方法

@end,

②.創(chuàng)建一個(gè)協(xié)議的屬性:@property(nonatomic,strong)iddelegate;

③.讓另一個(gè)類簽訂協(xié)議

④.給簽協(xié)議的那個(gè)類寫協(xié)議方法:-(void)stringWithText:(NSString *)string{self.textField.text=string;}想讓數(shù)據(jù)傳輸?shù)侥木徒o哪個(gè)賦值

⑤.在需要傳輸?shù)臅r(shí)候調(diào)用:[self dismissViewControllerAnimated:YES completion:^{

[_delegate stringWithText:self.textField.text];}];

⑥.給協(xié)議的屬性給予目標(biāo):ZAViewController *za=[[ZAViewController alloc]initWithDelegate:self];

注:-(id)initWithDelegate:(id)delegate{

if (self=[super init]) {

_delegate=delegate;

}

return self;

}

(3)單例:

①.創(chuàng)建一個(gè)單例:+(instancetype)shareDanLi{

static ViewController *view=nil;

if (view ==nil) {

view =[[self alloc]init];

}

return view;

}

②.在AppDelegate.m文件里創(chuàng)建新的Window,并且self.window.rootViewController=[ViewController shareDanLi];注:為了防止self.Window訪問Main.stroyborad

③.在ZAViewController里創(chuàng)建一個(gè)ViewController屬性,并且在需要的時(shí)候-傳遞數(shù)據(jù)(void)tuse:(UIButton *)bu{

self.ViewC=[ViewController shareDanLi];

[self dismissViewControllerAnimated:YES completion:^{

self.ViewC.textField.text=self.textField.text;

}];

}

(4)通知:

①.創(chuàng)建一個(gè)通知并添加上需要傳遞的數(shù)據(jù):[[NSNotificationCenter defaultCenter]postNotificationName:@"textField" object:self.textField.text userInfo:nil];

②.接受通知在viewDidLoad的方法里:[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(tyse:) name:@"textField" object:nil];

③.通知方法并從object中取出想要的數(shù)據(jù)然后賦給想要的東西:

-(void)tyse:(NSNotification *)te{

self.textField.text=te.object;

}

(5)block.看準(zhǔn)時(shí)機(jī)進(jìn)行block的回調(diào)

8月03日

導(dǎo)航視圖控制器:(UINavigationController)可控制多個(gè)視圖控制器

導(dǎo)航視圖控制器的創(chuàng)建:(1).給窗口的根視圖控制器設(shè)置一個(gè)導(dǎo)航視圖控制器并賦予導(dǎo)航控制器的根視圖控制器一個(gè)視圖:self.window.rootViewController=[[UINavigationController alloc]initWithRootViewController:[[ViewController alloc]init]];

(2).導(dǎo)航視圖控制器只能由按鈕彈出:住零如!

(3).給導(dǎo)航視圖控制器壓棧(去往下一層):[self.navigationController pushViewController:(繼承于UIViewController的類)[[ZAViewController alloc]init] animated:YES(是否有動(dòng)畫)];

(4).給導(dǎo)航視圖控制器彈棧(返回上一層):[self.navigationController popViowControllerAnimated:YES];

(5).給導(dǎo)航視圖控制器彈棧回到根視圖:[self.navigationController popToRootViewControllerAnimated:YES];

(6).給導(dǎo)航視圖控制器跳頁:①.創(chuàng)建一個(gè)彈窗控制器:UIAlertController *AlertController=[UIAlertController alertControllerWithTitle:@“標(biāo)題” message:@“內(nèi)容” preferredStyle:UIAlertControllerStyleAlert(UIAlertControllerStyleActionSheet)];

②.給彈窗控制器添加文本:[AlertController addTextFieldWithConfigurationHandler:nil];

③.給彈窗控制器設(shè)置按鈕并實(shí)現(xiàn)導(dǎo)航控制器的跳頁:UIAlerAction *alert=[UIAlerAction actionWithTitle:@“按鈕上的字” style:UIAlertActionStyleDefault(按鈕的模式UIAlertActionStyleCancel,UIAlertActionStyleDestructive)handler:^(UIAlerAction *_NonnullAction){(點(diǎn)擊后運(yùn)行的東西锄弱,可為nil)

NSArray *arr=[AlertController textFields];取出彈窗控制器里的文本框

UITextField *textField=arr[0];取出數(shù)組中的文本框

NSString *string=textField.text;取出文本框中的內(nèi)容

int a=[string intValue];將字符串改為數(shù)字

if(a0){

UIViewController *view=self.navigation.viewControllers[- -a];取出視圖

[self.navigationController popToViewController:(需要跳轉(zhuǎn)的頁面)view animated:YES]考蕾;

}];

④.將彈窗控制器添加到self.view上:[AlertController addAction:alert];

[self.view presentViewController:AlertController animated:YES completion:nil];

8月05日

導(dǎo)航控制欄的設(shè)置(navigationBar):(1)設(shè)置導(dǎo)航欄的風(fēng)格:self.navigationController.navigationBar.barStyle=UIBarStryleBlack;

(2)設(shè)置導(dǎo)航欄為透明(或是給導(dǎo)航欄是否整張圖片拉伸):self.navigationController.navigationBar.translucent=YES;

(3)為導(dǎo)航欄子控件設(shè)置顏色:self.navigationController.navigationBar.tiintColor=[UIColor redColor];

(4)給導(dǎo)航欄設(shè)置圖片:[self.navigationController.navigarionBar setBackgroundImage:[圖片] forBarMetrics:UIBarMetricsDefeult];

(5)在TableView里將導(dǎo)航欄設(shè)置為不透明:self.edgesForExtendedLayout =?UIRectEdgeNone

// 獲取導(dǎo)航欄

UINavigationBar * bar = self.navigationController.navigationBar;

// 使用backgroundColor設(shè)置沒有效果

//bar.backgroundColor = [UIColor blackColor];

// 設(shè)置導(dǎo)航欄的背景顏色

bar.barTintColor = [UIColor magentaColor];

// tintColor設(shè)置導(dǎo)航欄上子控件的默認(rèn)內(nèi)容顏色

bar.tintColor = [UIColor whiteColor];

//給導(dǎo)航欄設(shè)置隱藏

self.navigationBarHidden = YES;

//給navigation上的title賦予顏色大小

[self.navigationController.navigationBar setTitleTextAttributes:

@{NSFontAttributeName:[UIFont systemFontOfSize:23.f],

NSForegroundColorAttributeName:[UIColor whiteColor]}];

也可以就是不能設(shè)大小

self.navigationController.navigationBar.barStyle = UIBarStyleBlack;

//從story中取出ViewController并從UIApplication中取出UITabBarController中取出navigationController并彈出視圖

NewTableViewCell *cell =[tableView cellForRowAtIndexPath:indexPath];

if ([cell.reuseIdentifier isEqualToString:@"imageCell"]) {

}else{

UIStoryboard *story = [UIStoryboard storyboardWithName:@"Storyboard" bundle:nil];

NewWedAndViewController *newWed =[story instantiateViewControllerWithIdentifier:@"NewWedAndViewController"];

UITabBarController *bar = [UIApplication sharedApplication].keyWindow.rootViewController;

UINavigationController *navi = bar.viewControllers[0];

[navi pushViewController:newWed animated:YES];

navi.navigationBarHidden = YES;

8月13日

(1).在純故事版模式中使用:prepareForSeguse可直接獲取到push時(shí)的View:在純使用StoryBoard(使用線)時(shí)会宪,使用導(dǎo)航欄或UIBatton進(jìn)行(連線另一個(gè)視圖)pushViewController時(shí)肖卧,不用給UIBatton添加方法可以直接用系統(tǒng)的方法(-(void)prepareForSegue:(UIStoryboardSegue*)segue sender:(id)sender{

通過segue可以取到連線的目標(biāo)控制器

ZASecondViewController * vc = segue.destinationViewController;

然后可以隨時(shí)訪問完vc.view后傳遞數(shù)據(jù)

})

(2).在使用一個(gè)關(guān)聯(lián)在一起的幾個(gè)(例.兩個(gè)Label一個(gè)Button)控件時(shí),應(yīng)采用創(chuàng)建一個(gè)繼承與UIControl的類【UIControl 可以自己添加方法掸鹅,在UIControl中沒有viewdidload喜命,所以要初始化(-(instancetype)initWithFrame:(Cgrect)frame{})添加UILabel時(shí)要以自己的尺寸為父視圖,給自己添加方法時(shí)要用self】

例:在另一個(gè)類里創(chuàng)建時(shí):ZAControl * control = [[ZAControl alloc] initWithFrame:CGRectMake(0, 100, kScreenWidth, 40)];

[self.view addSubview:control];

例:- (instancetype)initWithFrame:(CGRect)frame {

if (self = [super initWithFrame:frame]){

self.backgroundColor = [UIColor whiteColor];

UILabel * nickName = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 40, frame.size.height)];

nickName.text = @"昵稱";

[self addSubview:nickName];

UILabel * name = [[UILabel alloc] initWithFrame:CGRectMake(40, 0, kScreenWidth - 40, frame.size.height)];

name.textAlignment = NSTextAlignmentRight;

name.text = @"哇哈哈";

name.tag = 1001;

給自己的添加?xùn)|西

[self addSubview:name];

// 直接在control對(duì)象上添加事件

[self addTarget:self action:@selector(pushAction:) forControlEvents:UIControlEventTouchUpInside];

}

return self;

}

(3)響應(yīng)鏈:就是在一個(gè)控件不響應(yīng)事件的時(shí)候河劝,這個(gè)控件的父視圖就響應(yīng),如果父視圖響應(yīng)不了就父視圖的父視圖去響應(yīng)矛紫;

例:// 獲取下一個(gè)響應(yīng)者對(duì)象

UIResponder * responder = self.nextResponder;

// 判斷是否存在responder赎瞎,當(dāng)沒有下一個(gè)響應(yīng)者對(duì)象時(shí),responder不存在

while (responder) {

// isKindOfClass:判斷responder是否是UIViewController或者UIViewController的子類

if ([responder isKindOfClass:[UIViewController class]]) {

// 獲取響應(yīng)者對(duì)象

ZAFirstViewController * vc = (ZAFirstViewController *)responder;

[vc.navigationController pushViewController:[[ZASecondViewController alloc] init] animated:YES];

}

// 當(dāng)沒有下一個(gè)響應(yīng)者對(duì)象時(shí)颊咬,responder為空

responder = responder.nextResponder;

}

設(shè)置標(biāo)簽視圖控制器:標(biāo)簽視圖控制器(UITarBarController)可控制多個(gè)導(dǎo)航欄控制器(UINavigationController)和視圖(UIView);

(1).設(shè)置窗口的根視圖控制器:self.window=[[UIWindow alloc]init];—>[self.window makeKeyandVieble];—>創(chuàng)建一個(gè)(UITabBarController)UITabBarController *tabBarController=[[UITabBarController alloc]init];—>進(jìn)行設(shè)置self.window.rootViewController=tabBarController;

(2)給UITabBarController設(shè)置按鈕:先創(chuàng)建一個(gè)和UIViewController繼承的類务甥,并且導(dǎo)入到AppDelegat.h文件—>ViewController *vc=[[ViewController alloc]init];—>然后將導(dǎo)航控制器的根視圖設(shè)為vc—>UINavigationController *navigation=[[UINavigationController alloc]initWithRootViewController:vc];—>并將UINavigationController以數(shù)組的形式傳送到tabBarController(標(biāo)簽視圖控制器)的viewControllers中來—>tabBarController.viewControllers=@[navigation,…];

(3)標(biāo)簽視圖控制器上按鈕的提示效果:navigation.tabBarItem=@“99+”;

(4)背影圖片是否拉伸:tabBarController.tabBar.translucent=YES;

(5).給標(biāo)簽視圖控制器設(shè)置背景圖片:tabBarController.tabBar.backgroundImage=[UIImage imageName:@“圖片名字”]牡辽;

(6)給標(biāo)簽視圖控制器設(shè)置系統(tǒng)的按鈕的圖片或文字:UITabBarItem *tabBarItem=[[UITabBarItem alloc]initWith…];——>給導(dǎo)航欄的tabBarItem賦值:navigationController.tabBarItem=barBarItem;

8月14日

自定義標(biāo)簽視圖控制器:(1).創(chuàng)建一個(gè)繼承UITabBarController的類并且將self.window.rootViewController設(shè)置為他:self.window=[[UIWindow alloc]init];

[self.window makeKeyAndVisible];

self.window.rootViewController=[[ZATabBarController alloc]init];

(2).在ZATabBArController類里去創(chuàng)建視圖和導(dǎo)航欄控制器的根視圖為視圖并且賦予self.ViewControllers=@[導(dǎo)航欄控制器的名字,注:這是個(gè)數(shù)組];

(3)刪除標(biāo)簽視圖控制器里的控件:利用For 循環(huán),然后就可以給其添加按鈕或背景顏色

例:for(UIView *view in self.tabBar.subviews){

[view removeFromSuperView];

}

//給標(biāo)簽視圖控制器設(shè)置背景

UIImageView *imageView=[[UIImageView alloc]initWithFrame:CGRectMake(0, 0, kSercenWidth, 49)];

imageView.image=[UIImage imageNamed:@"mask_navbar"];

imageView.tag=11111;

imageView.userInteractionEnabled=YES;

[self.tabBar addSubview:imageView];

//設(shè)置標(biāo)簽控制器上的按鈕

for (int i=0; i

if (i!=2){//當(dāng)i=2時(shí)不進(jìn)行創(chuàng)建按鈕

UIButton *btn=[[UIButton alloc]initWithFrame:CGRectMake(i*kSercenWidth/5, 0, kSercenWidth/5, 49)];

[self.tabBar addSubview:btn];

NSString *string=[NSString stringWithFormat:@"home_tab_icon_%d@2x",i+1];

[btn setBackgroundImage:[UIImage imageNamed:string] forState:UIControlStateNormal];

if (i>2) {

btn.tag=i+100-1;

}else{

btn.tag=i+100;

}

[btn addTarget:self action:@selector(changeNavigationController:) forControlEvents:UIControlEventTouchUpInside];

}

}

tabBarImageView=[[UIImageView alloc]initWithFrame:CGRectMake(0, 0, kSercenWidth/5, 49)];

tabBarImageView.image=[UIImage imageNamed:@"home_bottom_tab_arrow@2x"];

[imageView addSubview:tabBarImageView];

(4)設(shè)置標(biāo)簽選中那個(gè)子控制器:選中UINavigation—》self.seletedIndex=sender.tag-100;

例:-(void)changeNavigationController:(UIButton *)sender{

self.selectedIndex=sender.tag-100;

[UIView animateWithDuration:0.3 animations:^{

tabBarImageView.center=sender.center;

}];

}

8月15日

UIScrollView:滑動(dòng)視圖

(1).滑動(dòng)視圖的創(chuàng)建:UIScrollView *scrollView=[[UIScrollView alloc]initWithFrame:CGRectMake(起始x,起始y敞临,實(shí)際x态辛,實(shí)際y)];

(2).設(shè)置滑動(dòng)視圖的內(nèi)尺寸:scrollView.contentSize=CGSizeMake(里面的x的尺寸,里面y的尺寸);注:如果不想讓其往左往右滑動(dòng)請(qǐng)將其設(shè)置為0挺尿;

(3).取消水平或垂直滑軸:scrollView.showsHorizontalScrollIndicator=NO; scrollView.showVerticalScrollIndicator=NO;

(4).是否啟動(dòng)分頁:scrollView.pagingEnabled=YES;

(5).是否給本頁簽訂協(xié)議:scrollView.delegate=self;并在類名處簽訂

(6).給其設(shè)定最大放大值和最小縮小值:serollView.maximumZoomScale=2.5;scrollView.minimumZoomScalr=0.5;

(7).簽訂的方法有:

①.在其滑動(dòng)將要結(jié)束的時(shí)候觸發(fā)的方法:-(void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset{

//取出結(jié)束時(shí)的滑動(dòng)距離

CGPoint point=*targetContentOffset;注:targetContentOffset是指針

//賦予頁碼控制器的選中頁碼

pageControl.currentPage=point.x/kScreenWidth;

}

②.在其滑動(dòng)時(shí)實(shí)時(shí)追蹤:- (void)scrollViewDidScroll:(UIScrollView *)scrollView{

CGPoint point=scrollView;

pageControl.currentPage=point.x/kScreenWidth;

}

③.給其設(shè)定放大縮小的圖片:- (nullable UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{

return [self.view viewWithTag:44];

}

(8).可以給scrollView添加手勢(shì):①.手勢(shì)的創(chuàng)建:UITapGestureRecogmizer *tap=[[UITapGestureRecogmizer alloc]initWithtarget:self[給誰綁定] action:@selector(觸發(fā)的方法)]奏黑;

②.手勢(shì)的點(diǎn)擊觸發(fā)數(shù):tap.numberOFTapsRequired=2;當(dāng)我點(diǎn)擊2次時(shí)觸發(fā)方法

③.給哪一部分添加手勢(shì):[scrollView addSubview:tap];

(9).跳轉(zhuǎn)到指定的位置:[setContentOffset:CGPointMake(5*kScreen.width, 0)];

(10).取消系統(tǒng)的自動(dòng)設(shè)定位置:系統(tǒng)自動(dòng)判斷頁面上的容器,并且輔助將滑動(dòng)視圖及其子類內(nèi)邊距偏移—>self.automaticallyAdjustsScrollViewInsets=NO;

UIscrollView實(shí)例:

#import "ButtonViewController.h"

#define screenWidth [UIScreen mainScreen].bounds.size.width

#define screenHeight [UIScreen mainScreen].bounds.size.height

@implementation ButtonViewController{

UIScrollView *scrollView;

}

-(void)viewDidLoad{

[super viewDidLoad];

self.automaticallyAdjustsScrollViewInsets=NO;

self.title=@"自由縮放";

//scrollView的創(chuàng)建

scrollView=[[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, screenWidth, screenHeight)];

//內(nèi)尺寸

scrollView.contentSize=CGSizeMake(screenWidth, screenHeight);

//分頁

scrollView.pagingEnabled=YES;

//取消滾軸

scrollView.showsHorizontalScrollIndicator=NO;

[self.view addSubview:scrollView];

//設(shè)置最大最小縮放值

scrollView.maximumZoomScale=2.5;

scrollView.minimumZoomScale=0.5;

//給自己添加協(xié)議

scrollView.delegate=self;

//手勢(shì)

UITapGestureRecognizer *tap=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapGestureRecognizer:)];

//手勢(shì)計(jì)數(shù)

tap.numberOfTapsRequired=2;

//添加到

[scrollView addGestureRecognizer: tap];

UIImageView *imageView=[[UIImageView alloc]initWithFrame:self.view.bounds];

imageView.image=[UIImage imageNamed:self.string];

imageView.tag=44;

[scrollView addSubview:imageView];

}

//手勢(shì)觸發(fā)方法

-(void)tapGestureRecognizer:(UITapGestureRecognizer *)Tap{

//UIImageView *imageView=[self.view viewWithTag:44];

if (scrollView.zoomScale>1.0) {

[scrollView setZoomScale:1.0 animated:YES];

}else if (scrollView.zoomScale<1.0){

[scrollView setZoomScale:1.0 animated:YES];

}else{

[scrollView setZoomScale:2.5 animated:YES];

}

}

//當(dāng)放大縮小是位于居中

- (void)scrollViewDidZoom:(UIScrollView *)scrollView{

UIImageView *imageView=[self.view viewWithTag:44];

//CGFloat offsetX = (scrollView.bounds.size.width > scrollView.contentSize.width)?(scrollView.bounds.size.width - scrollView.contentSize.width)/2 : 0.0;

//CGFloat offsetY = (scrollView.bounds.size.height > scrollView.contentSize.height)?(scrollView.bounds.size.height - scrollView.contentSize.height)/2 : 0.0;

imageView.center = CGPointMake(screenWidth/2,screenHeight/2);

}

//給其指定放大縮小的圖片

- (nullable UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{

return [self.view viewWithTag:44];

}

@end

怎樣使滑動(dòng)視圖實(shí)現(xiàn)無限循環(huán):

多添加總圖片的首尾各一張编矾,將最后一張放在第一張前 熟史,將第一張放在最后一張以5,0窄俏,1蹂匹,2,3凹蜈,4限寞,5,0的形式存在仰坦,將第一次顯示的圖片位于0履植,在添加視圖時(shí)用[scrollView setContentOffset:CGPointMake(kScreen.width, 0)];達(dá)到目的,當(dāng)其超過后面0的時(shí)直接跳轉(zhuǎn)到1缎岗,當(dāng)超過前面的5時(shí)直接跳轉(zhuǎn)到4静尼,例如下面

- (void)scrollViewDidScroll:(UIScrollView *)scrollView{

//給頁碼控制器賦值頁碼

NSInteger w=scrollView.contentOffset.x/kScreen.width-1;

if (w<0) {

w=4;

}else if(w>4){

w=0;

}

self.pageControl.currentPage=w;

//進(jìn)行假的無限循環(huán)

if (scrollView.contentOffset.x<=0) {

//直接跳轉(zhuǎn)到指定位置

[scrollView setContentOffset:CGPointMake(5*kScreen.width, 0)];

}else if(scrollView.contentOffset.x>=6*kScreen.width){

[scrollView setContentOffset:CGPointMake(kScreen.width, 0)];

}

}

UIPageControl:頁碼控制器

(1).頁碼控制器的創(chuàng)建:UIPageControl *pageControl=[[UIPageControll alloc]initWithFrame:CGRectMake(大小)];

(2).設(shè)定頁碼控制器的頁碼數(shù):pageControl.numberOfPages=5;

(3).設(shè)定選中后的按鈕顏色:pageControl.currenPageIndicatorTintColor=[UIColor redColor];

(4).給未選中的按鈕設(shè)置顏色:pageControl.pageindicatorTintColor=[UIColor blueColor]

(5).賦予頁碼控制器的選中頁碼:pageControl.currentPage=point.x/kScreenWidth;

UITableView :表視圖

(1).表視圖的創(chuàng)建:UITableView *tableView=[[UITableView alloc]initWithFrame:尺寸大小 style:(包含有分組【UITableViewStyleGrouped】和無分組【UITableViewStylePlain】)];

(2).可通過獲取plist文件來給UITableViewCell(框)賦值:在簽訂數(shù)據(jù)源和本身協(xié)議的情況下:tableView.dataSource = self;

①.進(jìn)行獲取路徑:NSString * pPath = [[NSBundle mainBundle] pathForResource:@"provinces" ofType:@"plist"];

②.根據(jù)plist里的Root去用數(shù)組或字典接受:self.provincesArray = [NSArray arrayWithContentsOfFile:pPath];

self.citiesDic = [NSDictionary dictionaryWithContentsOfFile:cPath];

③.完成數(shù)據(jù)源協(xié)議必須要執(zhí)行的方法:

【1】.設(shè)定有多少個(gè)組:- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

returnself.provincesArray.count;

}

【2】.設(shè)定每個(gè)組里的個(gè)數(shù):- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

// 每一組有多少行

// 1. 獲取每一個(gè)省份的名稱

NSString * provinceName = self.provincesArray[section];

// 2. 通過省名传泊,獲取對(duì)應(yīng)省地區(qū)數(shù)組

NSArray * citiesArr = self.citiesDic[provinceName];

// 3. 返回?cái)?shù)組元素個(gè)數(shù)

return citiesArr.count;

}

【3】.賦給每個(gè)欄的字體:- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

//創(chuàng)建一個(gè)UITableViewCell的前提是在創(chuàng)建UITableView時(shí)給其注冊(cè)一個(gè)字符串一樣的 make-1鼠渺,[tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"make-1"];

注:這里采用了復(fù)用的方法

UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:@"make-1" forIndexPath:indexPath];

// 1. 獲取每一個(gè)省份的名稱

NSString * provinceName = self.provincesArray[indexPath.section];

// 單元格沒有一次性加載完成,而是在需要顯示的時(shí)候眷细,調(diào)用此方法拦盹,所以section每次不一定是不一樣的

//NSLog(@"%@", provinceName);

// 2. 通過省名,獲取對(duì)應(yīng)省地區(qū)數(shù)組

NSArray * citiesArr = self.citiesDic[provinceName];

// 3. 獲取每一行的下標(biāo)取出相應(yīng)的數(shù)組

NSString * cityName = citiesArr[indexPath.row];

cell.textLabel.text = cityName;

return cell;

}

【4】. 設(shè)置表視圖順序的索引

- (nullable NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView {

return self.provincesArray;

}

【5】. UITableView的組頭和組尾標(biāo)題

// 這里的字符串是表視圖加載的時(shí)候回全部加載溪椎,注意:數(shù)組越界

- (nullable NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {

return self.provincesArray[section];

}

- (nullable NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section {

if (section == self.provincesArray.count - 1) {

return [NSString stringWithFormat:@"上有%@普舆,下有riben", self.provincesArray[section]];

} else {

return [NSString stringWithFormat:@"上有%@,下有%@", self.provincesArray[section], self.provincesArray[section + 1]];

}

}

(3). 表視圖索引條

tableView.sectionIndexBackgroundColor = [UIColor redColor];

tableView.sectionIndexColor = [UIColor blackColor];

tableView.sectionIndexTrackingBackgroundColor = [UIColor greenColor];

(4).//創(chuàng)建一個(gè)UITableViewCell的前提是在創(chuàng)建UITableView時(shí)給其注冊(cè)一個(gè)字符串一樣的 make-1校读,[tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"make-1"];

注:這里采用了復(fù)用的方法

UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:@"make-1" forIndexPath:indexPath];

在UITableView中如何使UITableViewCell點(diǎn)擊后變?yōu)椴贿x中狀態(tài):self.myTableView.allowsSelection = NO;

UITableViewController—>QQ組的收縮

#import "ZATableViewController.h"

#define CellD@"CellID"

@interface ZATableViewController ()

@property(nonatomic,strong)NSArray *AllArray;

@property(nonatomic,strong)NSMutableArray *stateArray;

@end

@implementation ZATableViewController

- (void)viewDidLoad {

[super viewDidLoad];

//獲取文件

[self _newPlist];

//創(chuàng)建

[self _alloc];

}

-(void)_alloc{

[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:CellD];

}

-(void)_newPlist{

NSString *path=[[NSBundle mainBundle]pathForResource:@"friends.plist" ofType:nil];

self.AllArray=[NSArray arrayWithContentsOfFile:path];

//創(chuàng)建出一個(gè)可以用于接收的可變數(shù)組

self.stateArray=[NSMutableArray array];

for(int i=0;i

[self.stateArray addObject:@"0"];

}

}

- (void)didReceiveMemoryWarning {

[super didReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

return self.AllArray.count;

}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

//根據(jù)前面添加的可變數(shù)組判斷是否輸出多少行

if ([self.stateArray[section]isEqualToString:@"0"]) {

NSDictionary *dic=self.AllArray[section];

NSArray *arr=dic[@"friends"];

return arr.count;

}else{

return 0;

}

}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellD forIndexPath:indexPath];

NSDictionary *dic=self.AllArray[indexPath.section];

NSArray *arr=dic[@"friends"];

cell.textLabel.text=arr[indexPath.row];

return cell;

}

-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{

return 70;

}

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{

NSDictionary *dic=self.AllArray[section];

NSString *string=dic[@"group"];

UIButton *btn=[[UIButton alloc]init];

//給button賦tag值使其在觸發(fā)方法時(shí)可以取到本該屬于他的字符

btn.tag=section+10;

[btn setTitle:string forState:UIControlStateNormal];

[btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];

[btn setBackgroundImage:[UIImage imageNamed:@"tableCell_common"] forState:UIControlStateNormal];

//給組頭添加方法

[btn addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside];

return btn;

}

-(void)buttonAction:(UIButton *)sender{

//先進(jìn)行判斷看可變數(shù)組中是否是0沼侣;如果是0就改為1;如果是1就改為0歉秫;

if ([self.stateArray[sender.tag-10]isEqualToString:@"1"]) {

//給可變數(shù)組里的固定位置換字符

[self.stateArray replaceObjectAtIndex:sender.tag-10 withObject:@"0"];

NSLog(@"%@",self.stateArray[sender.tag-10]);

}else{

[self.stateArray replaceObjectAtIndex:sender.tag-10 withObject:@"1"];

NSLog(@"%@",self.stateArray[sender.tag-10]);

}

//主要的代碼:-------》刷新某一行或某一組

[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:sender.tag-10] withRowAnimation:UITableViewRowAnimationAutomatic];

}

//一個(gè)section刷新

NSIndexSet *indexSet=[[NSIndexSet alloc]initWithIndex:2];

[tableview reloadSections:indexSet withRowAnimation:UITableViewRowAnimationAutomatic];

//一個(gè)cell刷新

NSIndexPath *indexPath=[NSIndexPath indexPathForRow:3 inSection:0];

[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath,nil] withRowAnimation:UITableViewRowAnimationNone];

UICollectionView: 集合視圖

①.創(chuàng)建一個(gè)流水布局或自行創(chuàng)建一個(gè)繼承與UICollectionViewLayout的layout:UICollectionViewFlowLayout * layout = [[UICollectionViewFlowLayout alloc] init];

【1】.可設(shè)置單元格(layout.itemSize)的大卸曷濉:layout.itemSize = CGSizeMake(44, [UIScreen mainScreen].bounds.size.height);

【2】.可設(shè)置單元格之間的間距和行的間距:間距:layout.minimumInteritemSpacing=1行:layout.minimumLineSpacing=1;

// 設(shè)置滑動(dòng)方向

layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;

②.創(chuàng)建一個(gè)集合視圖并且設(shè)置位置:UICollectionView *collectionView=[[UICollectionView alloc]initWithFrame:(尺寸) collectionViewLayout:layout];

可以采用復(fù)用的方法來服用cell:[collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:cellID];

// collectionView同樣需要數(shù)據(jù)源方法來提供單元格

collectionView.dataSource = self;

collectionView.delegate = self;

和tableView差不多就是輸出尺寸而不是距離,可自定義item

UIPickerView:可選中的滑動(dòng)按鈕視圖

①.創(chuàng)建

②.簽訂協(xié)議UIPickViewDataSource和UIPickViewDelegat

③.復(fù)寫方法:與tableView差不多{

轧膘、钞螟、并列多少個(gè)

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {

return 1;

}

一列有多少個(gè)

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {

return self.dataArr.count;

}

、谎碍、返回一個(gè)的字符

// 返回每一個(gè)格子中的字符串

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {

return self.dataArr[row];

}

}

④.0.從pickerView獲取選中地區(qū)的名字

NSInteger selectedRow = [self.pickerView selectedRowInComponent:0];

8月31日多線程


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末脂男,一起剝皮案震驚了整個(gè)濱河市灾锯,隨后出現(xiàn)的幾起案子蹋半,更是在濱河造成了極大的恐慌若债,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扳碍,死亡現(xiàn)場(chǎng)離奇詭異提岔,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)笋敞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門碱蒙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人夯巷,你說我怎么就攤上這事赛惩。” “怎么了趁餐?”我有些...
    開封第一講書人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵喷兼,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我后雷,道長(zhǎng)季惯,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任臀突,我火速辦了婚禮勉抓,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘候学。我一直安慰自己藕筋,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開白布梳码。 她就那樣靜靜地躺著隐圾,像睡著了一般。 火紅的嫁衣襯著肌膚如雪掰茶。 梳的紋絲不亂的頭發(fā)上暇藏,一...
    開封第一講書人閱讀 49,079評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音濒蒋,去河邊找鬼叨咖。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的甸各。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼焰坪,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼趣倾!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起某饰,我...
    開封第一講書人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤儒恋,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后黔漂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體诫尽,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年炬守,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了牧嫉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡减途,死狀恐怖酣藻,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情鳍置,我是刑警寧澤辽剧,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站税产,受9級(jí)特大地震影響怕轿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜辟拷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一撞羽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧梧兼,春花似錦放吩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至考赛,卻和暖如春惕澎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背颜骤。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來泰國打工唧喉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓八孝,卻偏偏與公主長(zhǎng)得像董朝,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子干跛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

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