提高iOS開發(fā)效率的小技巧與思路
先用一張圖展示學(xué)習(xí)iOS開發(fā)應(yīng)該掌握的知識體系:

1.全圖片作為背景的時候,可能遇到的問題。,滑回的時候,圖片停留了一會才滑回去。
原因: 這種界面一般使用一般用imageView的第三種填充方式。

這種填充方式可以讓圖片不被壓縮變形的前提下,盡可能去填充整個控件,但是設(shè)置這個枚舉的填充方式的時候,記得按照下圖這樣設(shè)置,將超出控件范圍的給切割掉

設(shè)置約束的時候,記得選擇currentview的那個對象

2.設(shè)備適配的問題
還是上面這張圖片,按照設(shè)計在6p上面來設(shè)置自動約束,約好后,在5s上面的時候,下面的愛心在自動約束的設(shè)置下面和專業(yè)設(shè)置太近,這時候挺影響美觀的,這時候第一反應(yīng)當(dāng)然是根據(jù)設(shè)備來進行調(diào)整,但是我覺得這里完全可以使用下面這種方式來進行判斷設(shè)置
CGFloat top = 0;
CGFloat left = 0;
CGFloat bottom = 0;
CGFloat right = 0;
if ([UIScreen ff_screenSize].width == 375) {
top = 80;
left = 70;
bottom = 31;
self.titleLabel.font = [UIFont systemFontOfSize:18];
self.englishLabel.font = [UIFont systemFontOfSize:20];
self.introduceLabel.font = [UIFont systemFontOfSize:14];
right = 33;
}else if ([UIScreen ff_screenSize].width == 414){
bottom = 31;
top = 88;
left = 84;
right = 33;
}else if ([UIScreen ff_screenSize].width == 320){
self.titleLabel.font = [UIFont systemFontOfSize:16];
self.englishLabel.font = [UIFont systemFontOfSize:18];
self.introduceLabel.font = [UIFont systemFontOfSize:13];
self.introduceTop.constant = 8;
top = 70;
left = 44;
bottom = 24;
right = 28;
}
self.collectionButtonLeft.constant = right;
self.chineseLabelTop.constant = top;
self.introlduceLeft.constant = left;
self.collectionButtonbottom.constant = bottom;
[self.view setNeedsLayout];
記得修改約束后調(diào)用一下[self.view setNeedsLayout]; 這也是很關(guān)鍵的一點,不調(diào)用沒有效果。
3.數(shù)字動畫效果

在涉及到數(shù)字比較大的數(shù)據(jù)的時候可以采取這個效果來做,效果感人。
想實現(xiàn)這種效果也比較簡單。
@property (weak, nonatomic) IBOutlet UICountingLabel *tuitionLabel; weakSelf.tuitionLabel.text = self.tuitionForAcademyModel.tuition; NSInteger grade = [self.tuitionForAcademyModel.tuition integerValue]; weakSelf.tuitionLabel.format = @"%d%"; [weakSelf.tuitionLabel countFromZeroTo:grade];
最重要的一步是設(shè)置format,不然他會跑小數(shù)的。
4.label文字間距如何調(diào)整
- (void)configureContentLabelText
{
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc]initWithString:@"Label"];
long number = 5;
CFNumberRef num = CFNumberCreate(kCFAllocatorDefault,kCFNumberSInt8Type,&number);
[attributedString addAttribute:(id)kCTKernAttributeName value:(__bridge id)num range:NSMakeRange(0,[attributedString length])];
CFRelease(num);
self.label.attributedText = attributedString;
}
效果如下,字的間距被拉開了

5 . 登錄思路
a.用戶進入app后,在使用app的過程中,進行需要登錄的操作。
b.這時候調(diào)用的后臺接口一般需要帶上token參數(shù)。這時候因為用戶沒有登錄,沒有token,所以在這里進行判斷本地是否持久化了token.
c.本地沒有持久化token,所以自動彈出登錄框,讓用戶進行登錄
d.用戶登錄完畢后將相關(guān)數(shù)據(jù),特別是token進行本地持久化
小細節(jié):
a.每次啟動app的時候可以將token 進行io操作讀取出來,保存在單例里面,這樣就不用重復(fù)的去進行耗費性能的io操作
b.因為項目中自定義控件必不可少,在控件級別的頁面,需要使用到需要登錄的操作,這時候就需要發(fā)送通知給對應(yīng)的控制器來present login控制器,因為控制器級別才能彈出控制器,這樣一來,會產(chǎn)生大量的通知操作,建議可以將login寫在window上面(這里因為項目工期緊,發(fā)現(xiàn)這個問題的時候已經(jīng)不好處理,希望后來的兄弟們切記)
c.需要token參數(shù)的接口,token參數(shù)錯誤,這時候需要后臺給一個統(tǒng)一的回調(diào),這樣方便集中起來處理
6 . 賬號互踢的思路
千萬不要嘗試在單個頁面去處理。
思路如下:
1.需要在登錄登出的發(fā)送通知到各個控制器,并在通知里面進行各個控制器的初始化操作。
2.在調(diào)用需要登錄才能操作的接口的時候,后臺進行判斷給你一個token 參數(shù)失效的回調(diào)
3.作為一個合理的項目框架,總該有一個AFN的封裝吧!在封裝的AFN里面進行統(tǒng)一判斷,如下圖。(因為每個后臺處理方式不一樣,代碼就上圖吧,給你們代碼也復(fù)用不了。)

4.這個通知發(fā)送到了UITabBarController,進行讓用戶重新登錄處理
#import <UIKit/UIKit.h> @interface WXMainController : UITabBarController @end
#pragma mark -監(jiān)聽賬號互踢,這時候先退出登錄,然后回到首頁
- (void)addNotification{
WS(weakSelf);
// [[NSNotificationCenter defaultCenter] postNotificationName:KMutualKickNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserverForName:KMutualKickNotification object:nil queue:nil usingBlock:^(NSNotification * _Nonnull note) {
[weakSelf alertWindow];
}];
}
#pragma mark-彈出框選擇界面
- (void)alertWindow{
if (!self.isShow) {
self.isShow = YES;
UIAlertView *alter = [[UIAlertView alloc] initWithTitle:@"" message:@"您的賬號已在其他設(shè)備登錄,現(xiàn)在您已經(jīng)處于退出登錄狀態(tài)" delegate:self cancelButtonTitle:@"確定" otherButtonTitles:nil];
[alter show];
}
}
#pragma mark-彈出框選擇界面的代理方法,點擊確定就彈出登錄框
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
if (buttonIndex == 0) {
WXLoginController * loginController = [WXLoginController showLoginContoller:NO andIsShowColse:NO];
[self presentViewController:loginController animated:YES completion:nil];
self.isShow = NO;
}
}
任何事情都有方法和技巧,單沒有捷徑,IOS開發(fā)也不例外,腳踏實地從實踐中發(fā)現(xiàn)方法,熟練后就有技巧。希望本文能夠幫助的學(xué)習(xí)IOS開發(fā)的大家。
相關(guān)文章
IOS 開發(fā)之 NSMutableArray與NSArray 的區(qū)別
這篇文章主要介紹了IOS 開發(fā)之 NSMutableArray與NSArray 的區(qū)別的相關(guān)資料,希望通過本文能掌握這部分內(nèi)容,需要的朋友可以參考下2017-09-09
iOS中詳解Block作為property屬性實現(xiàn)頁面之間傳值
這篇文章主要介紹了iOS中Block作為property屬性實現(xiàn)頁面之間傳值的相關(guān)知識點,以及代碼分享,一起學(xué)習(xí)下吧。2018-02-02
iOS各種ViewController控制器使用示例完整介紹
這篇文章主要為大家介紹了iOS各種ViewController控制器使用示例完整介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-07-07
iOS利用Runtime實現(xiàn)友盟頁面數(shù)據(jù)統(tǒng)計的功能示例
這篇文章主要給大家介紹了關(guān)于iOS利用Runtime實現(xiàn)友盟頁面數(shù)據(jù)統(tǒng)計功能的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-01-01
iOS開發(fā)中使用UIScrollView實現(xiàn)圖片輪播和點擊加載
這篇文章主要介紹了iOS開發(fā)中使用UIScrollView實現(xiàn)圖片輪播和點擊加載的方法,代碼基于傳統(tǒng)的Objective-C,需要的朋友可以參考下2015-12-12
iOS開發(fā) widget構(gòu)建詳解及實現(xiàn)代碼
這篇文章主要介紹了iOS開發(fā) widget構(gòu)建詳解的相關(guān)資料,并附實例代碼,需要的朋友可以參考下2016-11-11
iOS的CoreAnimation開發(fā)框架中的Layer層動畫制作解析
在iOS中UIView層的屬性會映射到CoreAnimation框架的CALayer,這里我們來看一下iOS的CoreAnimation開發(fā)框架中的Layer層動畫制作解析,需要的朋友可以參考下2016-07-07

