Ios常用技巧

iOS 常用小技巧大雜燴(上)

2016-06-02 iOS大全

(點擊上方公眾號杈绸,可快速關注)

來源:品味_生活

鏈接:http://www.reibang.com/p/7c3ee5e67d03

1帖蔓,打印View所有子視圖

po [[self view]recursiveDescription]

2,layoutSubviews調(diào)用的調(diào)用時機

* 當視圖第一次顯示的時候會被調(diào)用

* 當這個視圖顯示到屏幕上了,點擊按鈕

* 添加子視圖也會調(diào)用這個方法

* 當本視圖的大小發(fā)生改變的時候是會調(diào)用的

* 當子視圖的frame發(fā)生改變的時候是會調(diào)用的

* 當刪除子視圖的時候是會調(diào)用的

3瞳脓,NSString過濾特殊字符

// 定義一個特殊字符的集合

NSCharacterSet *set = [NSCharacterSet characterSetWithCharactersInString:

@"@/:塑娇;()¥「」"、[]{}#%-*+=_\|~<>$€^?'@#$%^&*()_+'""];

// 過濾字符串的特殊字符

NSString *newString = [trimString stringByTrimmingCharactersInSet:set];

4劫侧,TransForm屬性

//平移按鈕

CGAffineTransform transForm = self.buttonView.transform;

self.buttonView.transform = CGAffineTransformTranslate(transForm, 10, 0);

//旋轉(zhuǎn)按鈕

CGAffineTransform transForm = self.buttonView.transform;

self.buttonView.transform = CGAffineTransformRotate(transForm, M_PI_4);

//縮放按鈕

self.buttonView.transform = CGAffineTransformScale(transForm, 1.2, 1.2);

//初始化復位

self.buttonView.transform = CGAffineTransformIdentity;

5埋酬,去掉分割線多余15像素

首先在viewDidLoad方法加入以下代碼:

if ([self.tableView respondsToSelector:@selector(setSeparatorInset:)]) {

? ? ? ?[self.tableView setSeparatorInset:UIEdgeInsetsZero];

}

if ([self.tableView respondsToSelector:@selector(setLayoutMargins:)]) {

[self.tableView setLayoutMargins:UIEdgeInsetsZero];

}

然后在重寫willDisplayCell方法

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell

forRowAtIndexPath:(NSIndexPath *)indexPath{

if ([cell respondsToSelector:@selector(setSeparatorInset:)]) {

[cell setSeparatorInset:UIEdgeInsetsZero];

}

if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {

[cell setLayoutMargins:UIEdgeInsetsZero];

}

}

6,計算方法耗時時間間隔

// 獲取時間間隔

#define TICK ? CFAbsoluteTime start = CFAbsoluteTimeGetCurrent();

#define TOCK ? NSLog(@"Time: %f", CFAbsoluteTimeGetCurrent() - start)

7烧栋,Color顏色宏定義

// 隨機顏色

#define RANDOM_COLOR [UIColor colorWithRed:arc4random_uniform(256) / 255.0 green:arc4random_uniform(256) / 255.0 blue:arc4random_uniform(256) / 255.0 alpha:1]

// 顏色(RGB)

#define RGBCOLOR(r, g, b) [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:1]

// 利用這種方法設置顏色和透明值写妥,可不影響子視圖背景色

#define RGBACOLOR(r, g, b, a) [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:(a)]

8,Alert提示宏定義

#define Alert(_S_, ...) [[[UIAlertView alloc] initWithTitle:@"提示" message:[NSString stringWithFormat:(_S_), ##__VA_ARGS__] delegate:nil cancelButtonTitle:@"確定" otherButtonTitles:nil] show]

8审姓,讓 iOS 應用直接退出

- (void)exitApplication {

? ?AppDelegate *app = [UIApplication sharedApplication].delegate;

? ?UIWindow *window = app.window;

[UIView animateWithDuration:1.0f animations:^{

window.alpha = 0;

} completion:^(BOOL finished) {

exit(0);

}];

}

8珍特,NSArray 快速求總和 最大值 最小值 和 平均值

NSArray *array = [NSArray arrayWithObjects:@"2.0", @"2.3", @"3.0", @"4.0", @"10", nil];

CGFloat sum = [[array valueForKeyPath:@"@sum.floatValue"] floatValue];

CGFloat avg = [[array valueForKeyPath:@"@avg.floatValue"] floatValue];

CGFloat max =[[array valueForKeyPath:@"@max.floatValue"] floatValue];

CGFloat min =[[array valueForKeyPath:@"@min.floatValue"] floatValue];

NSLog(@"%fn%fn%fn%f",sum,avg,max,min);

9,修改Label中不同文字顏色

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event

{

? ?[self editStringColor:self.label.text editStr:@"好" color:[UIColor blueColor]];

}

- (void)editStringColor:(NSString *)string editStr:(NSString *)editStr color:(UIColor *)color {

// string為整體字符串, editStr為需要修改的字符串

NSRange range = [string rangeOfString:editStr];

NSMutableAttributedString *attribute = [[NSMutableAttributedString alloc] initWithString:string];

// 設置屬性修改字體顏色UIColor與大小UIFont

[attribute addAttributes:@{NSForegroundColorAttributeName:color} range:range];

self.label.attributedText = attribute;

}

10魔吐,播放聲音

?#import

? // ?1.獲取音效資源的路徑

? NSString *path = [[NSBundle mainBundle]pathForResource:@"pour_milk" ofType:@"wav"];

? // ?2.將路勁轉(zhuǎn)化為url

? NSURL *tempUrl = [NSURL fileURLWithPath:path];

? // ?3.用轉(zhuǎn)化成的url創(chuàng)建一個播放器

? NSError *error = nil;

? AVAudioPlayer *play = [[AVAudioPlayer alloc]initWithContentsOfURL:tempUrl error:&error];

? self.player = play;

? // ?4.播放

? [play play];

11扎筒,檢測是否IPad Pro和其它設備型號

- (BOOL)isIpadPro

{

UIScreen *Screen = [UIScreen mainScreen];

CGFloat width = Screen.nativeBounds.size.width/Screen.nativeScale;

CGFloat height = Screen.nativeBounds.size.height/Screen.nativeScale;

BOOL isIpad =[[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad;

BOOL hasIPadProWidth = fabs(width - 1024.f) = 8.0)

11莱找,修改Tabbar Item的屬性

? // 修改標題位置

? ?self.tabBarItem.titlePositionAdjustment = UIOffsetMake(0, -10);

? ?// 修改圖片位置

? ?self.tabBarItem.imageInsets = UIEdgeInsetsMake(-3, 0, 3, 0);

// 批量修改屬性

for (UIBarItem *item in self.tabBarController.tabBar.items) {

[item setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:

[UIFont fontWithName:@"Helvetica" size:19.0], NSFontAttributeName, nil]

forState:UIControlStateNormal];

}

// 設置選中和未選中字體顏色

[[UITabBar appearance] setShadowImage:[[UIImage alloc] init]];

//未選中字體顏色

[[UITabBarItem appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor greenColor]} forState:UIControlStateNormal];

//選中字體顏色

[[UITabBarItem appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor cyanColor]} forState:UIControlStateSelected];

12,NULL – nil – Nil – NSNULL的區(qū)別

* nil是OC的砸琅,空對象宋距,地址指向空(0)的對象。對象的字面零值

* Nil是Objective-C類的字面零值

* NULL是C的症脂,空地址谚赎,地址的數(shù)值是0,是個長整數(shù)

* NSNull用于解決向NSArray和NSDictionary等集合中添加空值的問題

11诱篷,去掉BackBarButtonItem的文字

[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -60)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? forBarMetrics:UIBarMetricsDefault];

12壶唤,控件不能交互的一些原因

1,控件的userInteractionEnabled = NO

2棕所,透明度小于等于0.01闸盔,aplpha

3,控件被隱藏的時候琳省,hidden = YES

4迎吵,子視圖的位置超出了父視圖的有效范圍,子視圖無法交互针贬,設置了击费。

5,需要交互的視圖桦他,被其他視圖蓋啄韫(其他視圖開啟了用戶交互)。

12快压,修改UITextField中Placeholder的文字顏色

[text setValue:[UIColor redColor] forKeyPath:@"_placeholderLabel.textColor"];

13圆仔,視圖的生命周期

1、 alloc 創(chuàng)建對象蔫劣,分配空間

2坪郭、 init (initWithNibName) 初始化對象,初始化數(shù)據(jù)

3拦宣、 loadView 從nib載入視圖 截粗,除非你沒有使用xib文件創(chuàng)建視圖

4、 viewDidLoad 載入完成鸵隧,可以進行自定義數(shù)據(jù)以及動態(tài)創(chuàng)建其他控件

5绸罗、 viewWillAppear視圖將出現(xiàn)在屏幕之前,馬上這個視圖就會被展現(xiàn)在屏幕上了

6豆瘫、 viewDidAppear 視圖已在屏幕上渲染完成

1珊蟀、viewWillDisappear 視圖將被從屏幕上移除之前執(zhí)行

2、viewDidDisappear 視圖已經(jīng)被從屏幕上移除,用戶看不到這個視圖了

3育灸、dealloc 視圖被銷毀腻窒,此處需要對你在init和viewDidLoad中創(chuàng)建的對象進行釋放.

viewVillUnload- 當內(nèi)存過低,即將釋放時調(diào)用磅崭;

viewDidUnload-當內(nèi)存過低儿子,釋放一些不需要的視圖時調(diào)用。

14砸喻,應用程序的生命周期

1柔逼,啟動但還沒進入狀態(tài)保存 :

- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions

2,基本完成程序準備開始運行:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

3割岛,當應用程序?qū)⒁敕腔顒訝顟B(tài)執(zhí)行愉适,應用程序不接收消息或事件,比如來電話了:

- (void)applicationWillResignActive:(UIApplication *)application

4癣漆,當應用程序入活動狀態(tài)執(zhí)行维咸,這個剛好跟上面那個方法相反:

- (void)applicationDidBecomeActive:(UIApplication *)application

5,當程序被推送到后臺的時候調(diào)用惠爽。所以要設置后臺繼續(xù)運行癌蓖,則在這個函數(shù)里面設置即可:

- (void)applicationDidEnterBackground:(UIApplication *)application

6,當程序從后臺將要重新回到前臺時候調(diào)用婚肆,這個剛好跟上面的那個方法相反:

- (void)applicationWillEnterForeground:(UIApplication *)application

7费坊,當程序?qū)⒁顺鍪潜徽{(diào)用,通常是用來保存數(shù)據(jù)和一些退出前的清理工作:

- (void)applicationWillTerminate:(UIApplication *)application

15旬痹,判斷view是不是指定視圖的子視圖

BOOL isView = ?[textView isDescendantOfView:self.view];

16,判斷對象是否遵循了某協(xié)議

if ([self.selectedController conformsToProtocol:@protocol(RefreshPtotocol)]) {

? ?[self.selectedController performSelector:@selector(onTriggerRefresh)];

}

17讨越,頁面強制橫屏

#pragma mark - 強制橫屏代碼

- (BOOL)shouldAutorotate{

//是否支持轉(zhuǎn)屏

return NO;

}

- (UIInterfaceOrientationMask)supportedInterfaceOrientations{

//支持哪些轉(zhuǎn)屏方向

return UIInterfaceOrientationMaskLandscape;

}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation{

return UIInterfaceOrientationLandscapeRight;

}

- (BOOL)prefersStatusBarHidden{

return NO;

}

18两残,系統(tǒng)鍵盤通知消息

1、UIKeyboardWillShowNotification-將要彈出鍵盤

2把跨、UIKeyboardDidShowNotification-顯示鍵盤

3人弓、UIKeyboardWillHideNotification-將要隱藏鍵盤

4、UIKeyboardDidHideNotification-鍵盤已經(jīng)隱藏

5着逐、UIKeyboardWillChangeFrameNotification-鍵盤將要改變frame

6崔赌、UIKeyboardDidChangeFrameNotification-鍵盤已經(jīng)改變frame

19,關閉navigationController的滑動返回手勢

self.navigationController.interactivePopGestureRecognizer.enabled = NO;

20耸别,設置狀態(tài)欄背景為任意的顏色

- (void)setStatusColor

{

? ?UIView *statusBarView = [[UIView alloc] initWithFrame:CGRectMake(0, 0,[UIScreen mainScreen].bounds.size.width, 20)];

? ?statusBarView.backgroundColor = [UIColor orangeColor];

? ?[self.view addSubview:statusBarView];

}

21健芭,讓Xcode的控制臺支持LLDB類型的打印

打開終端輸入三條命令:

? ?touch ~/.lldbinit

? ?echo display @import UIKit >> ~/.lldbinit

? ?echo target stop-hook add -o "target stop-hook disable" >> ~/.lldbinit

下次重新運行項目,然后就不報錯了秀姐。

22慈迈,Label行間距

-(void)test{

? ?NSMutableAttributedString *attributedString =

[[NSMutableAttributedString alloc] initWithString:self.contentLabel.text];

NSMutableParagraphStyle *paragraphStyle = ?[[NSMutableParagraphStyle alloc] init];

[paragraphStyle setLineSpacing:3];

//調(diào)整行間距

[attributedString addAttribute:NSParagraphStyleAttributeName

value:paragraphStyle

range:NSMakeRange(0, [self.contentLabel.text length])];

self.contentLabel.attributedText = attributedString;

}

23,UIImageView填充模式

@"UIViewContentModeScaleToFill", ? ? ?// 拉伸自適應填滿整個視圖

@"UIViewContentModeScaleAspectFit", ? // 自適應比例大小顯示

@"UIViewContentModeScaleAspectFill", ?// 原始大小顯示

@"UIViewContentModeRedraw", ? ? ? ? ? // 尺寸改變時重繪

@"UIViewContentModeCenter", ? ? ? ? ? // 中間

@"UIViewContentModeTop", ? ? ? ? ? ? ?// 頂部

@"UIViewContentModeBottom", ? ? ? ? ? // 底部

@"UIViewContentModeLeft", ? ? ? ? ? ? // 中間貼左

@"UIViewContentModeRight", ? ? ? ? ? ?// 中間貼右

@"UIViewContentModeTopLeft", ? ? ? ? ?// 貼左上

@"UIViewContentModeTopRight", ? ? ? ? // 貼右上

@"UIViewContentModeBottomLeft", ? ? ? // 貼左下

@"UIViewContentModeBottomRight", ? ? ?// 貼右下

24省有,宏定義檢測block是否可用

#define BLOCK_EXEC(block, ...) if (block) { block(__VA_ARGS__); };

// 宏定義之前的用法

if (completionBlock) ? {

completionBlock(arg1, arg2);

}

// 宏定義之后的用法

BLOCK_EXEC(completionBlock, arg1, arg2);

25痒留,Debug欄打印時自動把Unicode編碼轉(zhuǎn)化成漢字

// 有時候我們在xcode中打印中文,會打印出Unicode編碼,還需要自己去一些在線網(wǎng)站轉(zhuǎn)換,有了插件就方便多了谴麦。

DXXcodeConsoleUnicodePlugin 插件

26,設置狀態(tài)欄文字樣式顏色

[[UIApplication sharedApplication] setStatusBarHidden:NO];

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

26伸头,自動生成模型代碼的插件

// 可自動生成模型的代碼匾效,省去寫模型代碼的時間

ESJsonFormat-for-Xcode

27,iOS中的一些手勢

輕擊手勢(TapGestureRecognizer)

輕掃手勢(SwipeGestureRecognizer)

長按手勢(LongPressGestureRecognizer)

拖動手勢(PanGestureRecognizer)

捏合手勢(PinchGestureRecognizer)

旋轉(zhuǎn)手勢(RotationGestureRecognizer)

27恤磷,iOS 開發(fā)中一些相關的路徑

模擬器的位置:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs

文檔安裝位置:

/Applications/Xcode.app/Contents/Developer/Documentation/DocSets

插件保存路徑:

~/Library/ApplicationSupport/Developer/Shared/Xcode/Plug-ins

自定義代碼段的保存路徑:

~/Library/Developer/Xcode/UserData/CodeSnippets/

如果找不到CodeSnippets文件夾面哼,可以自己新建一個CodeSnippets文件夾。

證書路徑

~/Library/MobileDevice/Provisioning Profiles

28碗殷,獲取 iOS 路徑的方法

獲取家目錄路徑的函數(shù)

NSString *homeDir = NSHomeDirectory();

獲取Documents目錄路徑的方法

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

NSString *docDir = [paths objectAtIndex:0];

獲取Documents目錄路徑的方法

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);

NSString *cachesDir = [paths objectAtIndex:0];

獲取tmp目錄路徑的方法:

NSString *tmpDir = NSTemporaryDirectory();

29精绎,字符串相關操作

去除所有的空格

[str stringByReplacingOccurrencesOfString:@" " withString:@""]

去除首尾的空格

[str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

- (NSString *)uppercaseString; 全部字符轉(zhuǎn)為大寫字母

- (NSString *)lowercaseString 全部字符轉(zhuǎn)為小寫字母

?

?

? ?

? ?

?

? ?

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市锌妻,隨后出現(xiàn)的幾起案子代乃,更是在濱河造成了極大的恐慌,老刑警劉巖仿粹,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件搁吓,死亡現(xiàn)場離奇詭異,居然都是意外死亡吭历,警方通過查閱死者的電腦和手機堕仔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來晌区,“玉大人摩骨,你說我怎么就攤上這事萎河∈@ⅲ” “怎么了脖隶?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵夺颤,是天一觀的道長值朋。 經(jīng)常有香客問我凿渊,道長秤标,這世上最難降的妖魔是什么揪阶? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任遣总,我火速辦了婚禮睬罗,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘旭斥。我一直安慰自己容达,他們只是感情好,可當我...
    茶點故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布垂券。 她就那樣靜靜地躺著董饰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上卒暂,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天啄栓,我揣著相機與錄音,去河邊找鬼也祠。 笑死昙楚,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的诈嘿。 我是一名探鬼主播堪旧,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼奖亚!你這毒婦竟也來了淳梦?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤昔字,失蹤者是張志新(化名)和其女友劉穎爆袍,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體作郭,經(jīng)...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡陨囊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了夹攒。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蜘醋。...
    茶點故事閱讀 38,664評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖咏尝,靈堂內(nèi)的尸體忽然破棺而出压语,到底是詐尸還是另有隱情,我是刑警寧澤编检,帶...
    沈念sama閱讀 34,334評論 4 330
  • 正文 年R本政府宣布无蜂,位于F島的核電站,受9級特大地震影響蒙谓,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜训桶,卻給世界環(huán)境...
    茶點故事閱讀 39,944評論 3 313
  • 文/蒙蒙 一累驮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧舵揭,春花似錦谤专、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春蜡坊,著一層夾襖步出監(jiān)牢的瞬間杠输,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評論 1 266
  • 我被黑心中介騙來泰國打工秕衙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蠢甲,地道東北人。 一個月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓据忘,卻偏偏與公主長得像鹦牛,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子勇吊,可洞房花燭夜當晚...
    茶點故事閱讀 43,554評論 2 349

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