打開app,要把數(shù)據(jù)顯示在首頁上篱竭,就要把參數(shù)封裝到模型里面去,變?yōu)樽值洳匠瘢俳?jīng)過工具類里面的相關(guān)操作掺逼,形成字典給AFN當(dāng)參數(shù)上傳。AFN把請(qǐng)求下來的NSData二進(jìn)制轉(zhuǎn)換為JSON數(shù)據(jù)瓤介,也就是字典吕喘,
父子控制器
之前的做法是用strong三個(gè)控制器,各自初始化后刑桑,點(diǎn)擊按鈕跳轉(zhuǎn)兽泄,并且remove其它控制器。現(xiàn)在換一個(gè)做法漾月,【self addchild病梢。。◎涯埃】觅彰,也是強(qiáng)指針。就會(huì)添加到一個(gè)數(shù)組中钮热,只要self在填抬,控制器就在。不管怎么做都要設(shè)置table的contenSize隧期,還把全部?jī)?nèi)容都顯示出來飒责。再從數(shù)組中取出控制器。
cell的高度調(diào)大仆潮,在顯示clearcolor宏蛉,這樣就有間距了。
吐槽里面發(fā)布自己的東西是 新建一個(gè)viewController,但是有導(dǎo)航欄性置,所以是一個(gè)nagationControl的rootViewCon為新建的控制器拾并。但是項(xiàng)目里面這個(gè)是push的一個(gè)控制器,不用這么弄了鹏浅。
想要讓一行l(wèi)abel顯示不一樣的字體和顏色嗅义,用NS
鍵盤
封裝了一個(gè)view ControllerToolBar
發(fā)布吐槽里面是UITextView,但是沒有plach這個(gè)屬性隐砸,怎么弄才能顯示出文字效果之碗,在等我們輸入文字后消失,并且為什么textView直接在x=64的位置季希,按鈕就是在0 0的位置褪那。textView繼承自scrollView,里面有contentInsize的top默認(rèn)為64胖眷,我們要擁有它武通,在打印就發(fā)現(xiàn)是64.scrollView面有個(gè)屬性是automatiocallyAdjustScrollViewInset的bool值霹崎,默認(rèn)是yes珊搀。當(dāng)scrollView遇到Nav,UITab等空間尾菇,會(huì)默認(rèn)設(shè)置scrollVIew的contentInset境析。
uitextField
文字永遠(yuǎn)一行,不能多行派诬。
有placehoder屬性設(shè)置站位文字
繼承自UIcontrol
監(jiān)聽行為:設(shè)置代理劳淆;addTarget;通知:UITextFieldTextDidChangeNotification.
UITextView
能顯示任意文字,不能設(shè)置站位文字默赂。繼承UIScrol沛鸵,監(jiān)聽行為設(shè)置代理;通知。
自定義一個(gè)UITextView曲掰,里面設(shè)置兩個(gè)屬性copy 字符串placehoder疾捍,和strong Uicolor文字顏色的。
多種方法實(shí)現(xiàn)栏妖,一種是label一種是drawRect乱豆。在draw方法中,用字典加NSFontAttribute設(shè)置字體大小吊趾,畫文字的方法是drawInRect宛裕。。withAtt 论泛。 而要監(jiān)聽文字的話不要設(shè)置delegate揩尸,設(shè)計(jì)角度看代理是讓別人監(jiān)聽,而且外面要是再有一個(gè)delegate的話會(huì)覆蓋孵奶。
這樣就用通知疲酌,NotificationCenter addOberserver方法。在這里的selector方法中調(diào)用 【self setNeedsDisplay】會(huì)調(diào)用drawRect方法了袁,在里面判斷self.hasText有沒有值朗恳。
有幾個(gè)bug,在外面改屬性不好使载绿,要在自定義里面從寫屬性的set方法粥诫,從寫setNeedsDisplay。有setFont崭庸;setText等方法從寫怀浆。之后就是在里面發(fā)送網(wǎng)絡(luò)請(qǐng)求,根據(jù)參數(shù)發(fā)文字怕享。
設(shè)置鍵盤的話是在控制器中選擇self.textView.inputView屬性而self.textView.inputAccessoryView是設(shè)置顯示在鍵盤頂部的內(nèi)容执赡。自定義一個(gè)工具條繼承UIView,在類里寫一個(gè)創(chuàng)建按鈕的方法函筋。要想設(shè)置按鈕的位置沙合,在layoutSubviews方法里面,顯示工具條沒看完跌帐。
這個(gè)項(xiàng)目里擁有兩個(gè)自定義的鍵盤頂部?jī)?nèi)容首懈;有個(gè)方法是成為第一響應(yīng)者,能輸入文本的控件一旦成為第一響應(yīng)者谨敛,就會(huì)叫出相應(yīng)的鍵盤究履,【textView becomeFirstResponder】
有一個(gè)頂部是相冊(cè)和表情按鈕,我們想要監(jiān)聽他們的點(diǎn)擊事件脸狸,初始化是在initWithFrame中最仑。這個(gè)事情應(yīng)該是控制器做的,所以在ControllerToolBar中設(shè)置了代理,通過方法來實(shí)現(xiàn)按鈕的點(diǎn)擊,有一個(gè)weak類型的遵守協(xié)議的屬性泥彤。協(xié)議里面是的參數(shù)是工具類對(duì)象和索引紊搪,然后再當(dāng)前控制器中去設(shè)置代理,就是控件告訴控制器全景,然后控制器去做耀石。這樣就在控制器中實(shí)現(xiàn)的協(xié)議方法中去實(shí)現(xiàn)功能;其中一個(gè)是UIImagePickerController爸黄,有個(gè)一個(gè)屬性是是sourceYype滞伟,可以選擇是照相機(jī)還是相冊(cè),加一個(gè)判斷要是不是想打開的就return炕贵,還要實(shí)現(xiàn)這個(gè)類的一個(gè)協(xié)議方法梆奈,imagepicker... didFinsh方法,在方法里面實(shí)現(xiàn)dismiss方法称开,并且有一個(gè)參數(shù)是info能得到相冊(cè)里面的圖片亩钟。有一個(gè)方法能實(shí)現(xiàn)吧image寫入到相冊(cè)里面就是UIImageWriteToSaved..;assisLibabry什么庫能實(shí)現(xiàn)圖片圖片器鳖轰。
繼承一個(gè)UIView的表情類清酥,是一個(gè)scrollView,還有一個(gè)pageControl就是表情鍵盤蕴侣。想切換鍵盤的話在按鈕的實(shí)現(xiàn)方法中switchkeybord中用if判斷焰轻,是想知道現(xiàn)在是哪一個(gè)鍵盤,是系統(tǒng)還是自定義昆雀,切換就看inputVIew這個(gè)屬性是不是nil辱志。是的話彈系統(tǒng)自帶的,要不就是self.textView.inputView= 表情鍵盤;系統(tǒng)自帶鍵盤的高度是216.
想要換表情鍵盤就先退出的endEditing:YES狞膘,系統(tǒng)鍵盤就是設(shè)立為第一響應(yīng)者揩懒。要一個(gè)動(dòng)畫效果的彈出鍵盤,dispatch——after()……{
【UIVIew animatewithDuration:duration animations】
【self.textVIew becomeFirstResponder】
} 先固定pageController的高度挽封,numberOfPages屬性已球。scrollView里面的按鈕是一個(gè)挨一個(gè)的,為了方便計(jì)算用一個(gè)UIView加載到上面场仲,然后計(jì)算后面幾個(gè)和悦,pageEnable = yes退疫。輸出plist文件的數(shù)據(jù)個(gè)數(shù)渠缕,用數(shù)據(jù)算numberOfPages。
加載表情數(shù)據(jù)褒繁,就是plist文件亦鳞,讀取路徑【NSBundle main】pathForResourse;把文件中的字典轉(zhuǎn)模型,用一個(gè)數(shù)組就存,用懶加載燕差,用一個(gè)方法self.enmtions = [表情類型 objextArrayWithKeyValuesArray arrayWithCOntentsOfpath],但是frame的設(shè)置一般是在layoutSubView里面遭笋,但是在里面設(shè)置的話就會(huì)懶加載一次,對(duì)我這個(gè)沒有影響徒探。如何把數(shù)據(jù)加載上去瓦呼,利用數(shù)組。每一頁都有固定的個(gè)數(shù)测暗,那么久切割數(shù)組里的數(shù)據(jù)pageVIew.emotions = [emotions subrraryWithRange:] 結(jié)局?jǐn)?shù)組越界的方法央串,NSUInter left = emotions.count -range.location;
if(left >= 每頁的個(gè)數(shù))}
range.length = 每頁的個(gè)數(shù);
|else{
range.length = left碗啄;
}
在數(shù)組初始化中[btn setImageName :emotion.png],這樣圖片就出來了质和。frame設(shè)置在相冊(cè)里面。在pageView里面監(jiān)聽點(diǎn)擊事件稚字,
取出最上層window
UIWindow *window = [UIApplication shareApplication].window lastObject];
[widnow addSubiew:self.VIew];
是插入到textView饲宿,那么協(xié)議的話要有兩層,這樣的: 話用通知傳胆描,把表情放到字典里去瘫想,[Notification postNotificationName : Object: userInfo:]
表情選中的通知[Notification addObserver select name object:],這樣控制器就知道了,插入光標(biāo)所在【textView insertText:emotion.chs】;單獨(dú)設(shè)置一個(gè)刪除 按鈕昌讲,加入到數(shù)組中殿托,在for循環(huán)中給frame。要想實(shí)現(xiàn)刪除功能剧蚣,設(shè)一個(gè)通知支竹,告訴textView,在通知的選擇器的方法中實(shí)現(xiàn)[self.textView delteBackward];是往回刪的意思鸠按。
側(cè)拉實(shí)現(xiàn)
窗口的跟控制器礼搁,有個(gè)左側(cè)菜單,還有一個(gè)導(dǎo)航控制器的view目尖,這樣一挪就看到左側(cè)菜單了馒吴。所以根控制器上有兩個(gè)控件。點(diǎn)擊菜單按鈕轉(zhuǎn)換控制器
一個(gè)父控制器瑟曲,其他都是小控制器饮戳。想要自動(dòng)設(shè)置文字寬高,NSFontAttributeName當(dāng)一個(gè)參數(shù) [title boundingRectWithSize:];
考慮了用frame來做洞拨,但是一旦變小里面的控件就會(huì)擁擠了扯罐。
在手勢(shì)方法中如何讓控制器變小還帶動(dòng)畫效果,
[UIView animatieWithDuration:2.0 animations:^{
縮放比例,一遍縮放一遍往右邊挪
CGFloat scale = 300.0/[UIScreen mainScreen].bounds.size.height;
菜單左邊的間距
CGFloat leftMenuMargin = [UIScreen main ].bounds.size.width *(1 - scrale) *0.5;
self.navigationCOntroller.view.trasfrom = CGAffineTramsforMakeScale(0.5,0.5)
}]
菜單里的按鈕點(diǎn)擊切換控制器:
先把控制器加到數(shù)組中去,數(shù)組是由順序的烦衣,那么在view建立個(gè)協(xié)議用于傳遞消息歹河,當(dāng)在C中實(shí)現(xiàn)協(xié)議時(shí)掩浙,而這里要注意下當(dāng)我把新的控制器添加都愛上面去時(shí),舊的下面的控制器要挪開秸歧,不是銷毀厨姚。要不移開會(huì)耗費(fèi)資源渲染。這樣就要添加一個(gè)參數(shù)键菱,是之前的控制器的index值谬墙。并且點(diǎn)擊按鈕時(shí)不是push一個(gè)頁面出來而是從縮小的那個(gè)頁面再變大回來。就是把舊的transform給新的transform经备,并且把transform消除芭梯,照片
兩個(gè)bug
1.在把trasrom變回來之后有個(gè)問題蒙版還再上面所以要點(diǎn)擊兩下,設(shè)為屬性remov
2.導(dǎo)航欄從64 -44 - 64 會(huì)有黑條
一個(gè)導(dǎo)航控制器的view第一次顯示到它的父控件上時(shí)弄喘,如果transform的縮放值被改了玖喘,上面的20高度當(dāng)時(shí)是不會(huì)出來的。
這樣的話先顯示新的view蘑志,在改動(dòng)transf
沒什么關(guān)系的