*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第一課
UI即UserInterface(用戶界面)
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日多線程