目錄:
1、播放系統音頻
2、更改狀態欄顏色
3、圖片填充
4、圖片切圓
5、沙盒路徑
6、各個字段的含義
7、dispatch_block_t
8、NSAssert()和NSParameterAssert()的使用
9、添加PCH文件
10、添加自定義的字體到Xcode中
1、播放系統音頻
// <1> 獲取提示音路徑
NSString *path = [[NSBundle mainBundle] pathForResource:@"sound.mp3" ofType:nil];
// <2> 將字符串路徑轉化為NSURL
NSURL *URL = [NSURL fileURLWithPath:path];
// <3> 注冊系統音頻ID
SystemSoundID soundID ;
// <4> 創建系統音頻
AudioServicesCreateSystemSoundID((__bridge CFURLRef)URL, &soundID);
// <5> 播放系統音頻
AudioServicesPlaySystemSound(soundID);
2、更改狀態欄顏色
首先在info.plist里添加屬性View controller-based status bar appearance設置為NO
然后在ViewController里面設置狀態欄的顏色
//白色
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
或
//黑色
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];
3、圖片填充
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 100, 200)];
imageView.image = [UIImage imageNamed:@"pic.png"];
[self.view addSubview:imageView];
//設置填充模式
imageView.contentMode = UIViewContentModeScaleToFill; //填滿空間失去比例,默認這個
imageView.contentMode = UIViewContentModeScaleAspectFill;//按比例填充整個空間,多的部分截去
imageView.contentMode = UIViewContentModeScaleAspectFit; //按比例填充部分空間 少的部分空白
4、圖片切圓
UIImageView * imageView = [[UIImageView alloc] initWithFrame:CGRectMake(100, 100, 200, 200)];
imageView.image = [UIImage imageNamed:@"pic.png"];
[self.view addSubview:imageView];
//切圓
imageView.clipsToBounds = YES;
imageView.layer.cornerRadius = 100;
//邊框
imageView.layer.borderWidth = 5;
imageView.layer.borderColor = [UIColor redColor].CGColor;
5、沙盒路徑
1、Documents:蘋果建議將程序中建立的或在程序中瀏覽到的文件數據保存在該目錄下,iTunes備份和恢復的時候會包括此目錄。
2、Library:存儲程序的默認設置或其它狀態信息;(Library下的Caches文件夾:存放緩存文件,iTunes不會備份此目錄,此目錄下文件不會在應用退出刪除)
3、tmp:提供一個即時創建臨時文件的地方。
NSString *path; //路徑
//沙盒總路徑
path = NSHomeDirectory();
//Documents目錄
NSArray *array1 = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
path = array1[0];
//Library目錄
NSArray *array2 = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
path = array2[0];
//Caches目錄
NSArray *array3 = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
path = array3[0];
//tmp目錄
path = NSTemporaryDirectory();
6、各個字段的含義
DEPRECATED_ATTRIBUTE:意思就是這個API不建議開發者再使用了,再使用時,會出現編譯警告
NS_DESIGNATED_INITIALIZER:指定的構造器通過發送初始化消息到父類來保證object被完全初始化(也就是說所有的初始化方法最終都會調到指定的方法)
7、dispatch_block_t
這是系統定義的一個既沒有參數也沒有返回值的block,我們可以直接使用。
系統是這樣定義的
typedef void (^dispatch_block_t)(void);
跟我們自己定義的一樣,以后再遇到需要使用既沒有參數也沒有返回值的block的時候不用我們自己再定義了,直接用系統的就OK啦!
8、NSAssert()和NSParameterAssert()的使用
我們在開發中對于對象經常為nil或者條件不滿足,而導致程序出現bug或者崩潰,我們還不好定位那里出現了問題,現在我就簡單介紹NSAssert()和NSParameterAssert()拋出異常來定位這種問題的出現。
-
NSAssert()
//系統定義
#define NSAssert(condition, desc);
可以看出NSAssert()是個宏,用于開發階段調試程序中的Bug,通過為NSAssert()傳遞條件表達式來斷定是否屬于Bug,NSAssert()可以出現在程序的任何一個位置。
condition
是判斷條件,desc
是描述,如果條件為真,程序繼續運行沒毛?。蝗绻麠l件為假,則程序崩潰,打印異常信息(包括自定義的desc
)。
用法:
NSString *name = @"liyan";
NSAssert([name isEqualToString:@"liyang"], @"名字必須為liyang哦");
顯然條件為假,程序崩潰,打印異常信息:
2017-04-21 16:43:18.952455 text[374:35886] *** Assertion failure in -[ViewController viewDidLoad], /Users/jinwenzhuo/Desktop/text/text/Controller/ViewController.m:51
2017-04-21 16:43:18.970905 text[374:35886] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '名字必須為liyang哦'
NSAssert
和assert
都是斷言,主要的差別是assert
在斷言失敗的時候只是簡單的終止程序,而NSAssert
會報告出錯誤信息并且打印出來,所以只使用NSAssert
就好,可以不去使用assert
。
NSAssert
和NSCAssert
區別不大,作用都是一樣。一個定義OC的,一個定義C的。都可以使用!
-
NSParameterAssert()
//系統定義
#define NSParameterAssert(condition)
NSParameterAssert()也是一個宏定義,它只是針對參數是否存在的斷言。只需要一個參數,如果參數存在程序繼續運行,如果參數為空,則程序崩潰,打印異常信息
用法:
NSString *name;
NSParameterAssert(name);
異常信息打印結果:
2017-04-21 17:05:57.111971 text[397:39334] *** Assertion failure in -[ViewController viewDidLoad], /Users/jinwenzhuo/Desktop/text/text/Controller/ViewController.m:52
2017-04-21 17:05:57.122432 text[397:39334] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: name'
NSParameterAssert
和NSCparameterAssert
兩者的區別也是前者適用于Objective-C的方法,后者適用于C的函數。
另外,斷言只適用于debug模式,Xcode 已經默認將release環境下的斷言取消了,免除了忘記關閉斷言造成的程序不穩定,所以不用擔心在開發時候大膽使用。
9、添加PCH文件
xcode6中去掉了PCH,為了一些瑣碎的頭文件引用,加快了編譯速度!
1、首先創建PCH文件,command+N,找到PCH File
回車創建,命名text.pch
2、去TARGETS->Build Settings搜索Prefix Header雙擊添加路徑
$(SRCROOT)/工程名/PrefixHeader.pch
3、添加完之后與真實的路徑比對一下是否正確
如果不一致改為一致的就OK了!
10、添加自定義的字體到Xcode中
系統的字體太少,有時候不能滿足我們的要求,如果我們想要使用個性的字體就必須自己動手添加,下面就是添加方法。
1、先將ttf格式的自定義字體文件加入項目中
2、在info.plist中添加:Fonts provided by application
,填寫字體文件名稱 加后綴。
3、打印所有字體
NSLog(@"%@", [UIFont familyNames]);
4、看下效果圖
未完待續。。。