? ?最近在仿寫一款app 也是第一次寫這種企業(yè)級(jí)的app埃唯,所以想從開始 遇到的一些問題和用到的一些東西族壳,以供那些像我這樣的小白學(xué)習(xí)一下(不喜勿噴啊,奴家只是一個(gè)小白而已,或許遇到的問題有可能是初級(jí)的問題谨朝,所以不喜勿噴,?
1.在剛開始的時(shí)候先把用到的第三庫想列出來嫡纠,加以說明递沪,期間比較陌生的第三方庫也是靠百度的
? ?1)AFNetworking ?這個(gè)開發(fā)全部都知道吧 一個(gè)很好用的 網(wǎng)絡(luò)請(qǐng)求的第三方庫
? 2) ?CDDpagerController ??父子控制器切換界面的功能
? 3) ? FMDB ? 封裝的數(shù)據(jù)庫?
? ? ? ??在 FMDB 中有三個(gè)重要的類:
? ? ? ?FMDatabase:是一個(gè)提供 SQLite 數(shù)據(jù)庫的類,用于執(zhí)行 SQL 語句沫勿。
? ? ? FMResultSet:用在?FMDatabase?中執(zhí)行查詢的結(jié)果的類固逗。
? ? ? FMDatabaseQueue:在多線程下查詢和更新數(shù)據(jù)庫用到的類浅蚪。
4)IQKeyboardManager ?OS中專門管理UITextField/UITextView控件被遮擋的第三方庫工具,并且簡(jiǎn)單易用?
github連接https://github.com/hackiftekhar/IQKeyboardManager?
5) ?Masonry?非常簡(jiǎn)潔優(yōu)美的一款A(yù)utolayout框架
6)?MJExtension?是一套“字典和模型之間互相轉(zhuǎn)換”的輕量級(jí)框架
7) MJRefresh?功能強(qiáng)大的iOS下拉刷新(也支持上拉加載更多)控件
8)?SDCycleScrollView?簡(jiǎn)單好用的 無限循環(huán)工具烫罩。 超簡(jiǎn)單使用 部分自定義 獲取網(wǎng)絡(luò)圖片 圖片對(duì)應(yīng)的標(biāo)題 代理
9)?SDWebImage?可謂是占據(jù)大半壁江山惜傲。它支持從網(wǎng)絡(luò)中下載且緩存圖片,并設(shè)置圖片到對(duì)應(yīng)的UIImageView控件或者UIButton控件
10)?SVProgressHUD?是一個(gè)第三方的控件,是一個(gè)彈出提示層
11) ?TZImagePickerController 一個(gè)訪問照片 相冊(cè)的 第三庫
12)ZYCornerRadius直接對(duì)圖片處理圓角,而不是View使用還是很簡(jiǎn)單的
2.第三庫目前就用到了這么多,下面說一下我從第一步寫 到最后 遇到的一些問題和一些陌生的代碼
? ?1)new ?跟 alloc 的 區(qū)別
? ? 在項(xiàng)目中 總有寫 new ?有的時(shí)候 寫alloc ?那他們的區(qū)別是什么呢?
? ? new和alloc/init在功能上幾乎是一致的贝攒,分配內(nèi)存并完成初始化盗誊。差別在于,采用new的 ? 方式只能采用默認(rèn)的init方法完成初始化隘弊,采用alloc的方式可以用其他定制的初始化方法哈踱。 ?
?2)pch 文件 .h文件不顯示問題,在prefix header 導(dǎo)入路徑就好
3)#import 跟@class 和include的區(qū)別?
import會(huì)包含引用類的所有信息(內(nèi)容),包括引用類的變量和方法
@class僅僅是告訴編譯器有這么一個(gè)類, 具體這個(gè)類里有什么信息, 完全不知
效率上的區(qū)別
?include ?在C語言中梨熙,我們使用#include來引入頭文件开镣。使用#include “xx.h”來引入自定義的頭文件,使用#include來引入庫中的頭文件咽扇。
4)UICollectionReusableView 不知道 你們用沒用過邪财,過著知道他的寫法不 直接看代碼 就懂了
// 注冊(cè)頭部 [self.collectionView registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:HeaderID];
? ? // 如果有class來注冊(cè)這個(gè)頭部或尾部視圖時(shí)一定要用代碼的方式去設(shè)置下這個(gè)頭部或尾部的尺寸? ? // 加載的時(shí)候會(huì)根據(jù)字符串來判斷是頭還是尾? ? self.flowLayout.headerReferenceSize = CGSizeMake(50, 50);
? ? // 注冊(cè)尾部? ? [self.collectionView registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:FooterID];
? ? self.flowLayout.footerReferenceSize = CGSizeMake(50, 50);
?5)UIKIT_EXTERN
UIKIT_EXTERN簡(jiǎn)單來說,就是將函數(shù)修飾為兼容以往C編譯方式的质欲、具有extern屬性(文件外可見性)树埠、public修飾的方法或變量庫外仍可見的屬性
6)automaticallyAdjustsScrollViewInsets
從當(dāng)前界面跳轉(zhuǎn)到下一個(gè)界面的時(shí)候,導(dǎo)航欄多出來一個(gè)或者tabbar隱藏不了等問題的嘶伟,大部分情況都是automaticallyAdjustsScrollViewInsets狀態(tài)是YES造成的怎憋,那么這時(shí)候果斷在viewDidLoad這個(gè)方法里面加一句:self.automaticallyAdjustsScrollViewInsets = NO; 不讓它自動(dòng)留出空白,由開發(fā)者自己去控制留白及坐標(biāo)問題九昧。
? 7) appearance
在iOS屬性后有UI_APPEARANCE_SELECTOR標(biāo)志都可以一次性統(tǒng)一設(shè)置.這種情況還有很多.比如說統(tǒng)一設(shè)置UITabbarItem的文字顏色
就是你有一個(gè)全局的UI nav 都是 一樣的 可以這樣設(shè)置
8)NSFontAttributeName ?NSForgroundColorAttrbuteName
?① 設(shè)置字體屬性绊袋,默認(rèn)值 字體 ? 字號(hào)
② 設(shè)置字體顏色 取值 UIcolor ?默認(rèn)黑色
具體可以看這篇文章?http://blog.csdn.net/lwjok2007/article/details/47184911
9)tabbar 點(diǎn)擊動(dòng)畫 (不好意思 不知道怎么制作gif ?圖片 就直接粘貼 代碼吧 希望能看懂)
#pragma mark - 點(diǎn)擊動(dòng)畫
- (void)tabBarButtonClick:(UIControl *)tabBarButton
{
? ? for (UIView *imageView in tabBarButton.subviews) {
? ? ? ? if ([imageView isKindOfClass:NSClassFromString(@"UITabBarSwappableImageView")]) {
? ? ? ? ? ? //需要實(shí)現(xiàn)的幀動(dòng)畫,這里根據(jù)自己需求改動(dòng)
? ? ? ? ? ? CAKeyframeAnimation *animation = [CAKeyframeAnimation animation];
? ? ? ? ? ? animation.keyPath = @"transform.scale";
? ? ? ? ? ? animation.values = @[@1.0,@1.1,@0.9,@1.0];
? ? ? ? ? ? animation.duration = 0.3;
? ? ? ? ? ? animation.calculationMode = kCAAnimationCubic;
? ? ? ? ? ? //添加動(dòng)畫
? ? ? ? ? ? [imageView.layer addAnimation:animation forKey:nil];
? ? ? ? }
? ? }
}
嗯 今天先這樣吧 以后 會(huì)隔幾天都會(huì)去更新 ?自己在仿寫過程中 遇到的問題及新學(xué)洗的知識(shí)
在這里非常感謝 源碼作者 對(duì)我的肯定 回頭把 作者的 鏈接 附上?
如果大家有什么不懂得 都可以跟我留言,如果感覺對(duì)你們有幫助 那就動(dòng)動(dòng)你們的小鼠標(biāo) 贊一下 謝謝?