詳解統(tǒng)一在最下方,或查看git文件中的README
字體的漸隱漸現(xiàn)、漸進(jìn)漸出
金額的大寫顯示
- 地址: 金額的大寫顯示
1.gif
返回程序彈出密碼框
- 地址: 返回程序彈出密碼框
文件管理器
- 地址:文件管理器
旋轉(zhuǎn)的tableView
- 地址:[旋轉(zhuǎn)的tableView](https://github.com/DrunkenMouse/rotateTableView)
- 這個(gè)有必要先說下,將一個(gè)tableView旋轉(zhuǎn)90度,內(nèi)部的tableViewCell在逆轉(zhuǎn)90度。達(dá)到tableView橫向滾動(dòng),內(nèi)部cell上掛載一個(gè)新的tableView用于顯示。感謝NSLog的幫助。
Demo詳解
字體的漸隱漸現(xiàn)、漸進(jìn)漸出
仿RQShineLabel RQShineLabel
設(shè)置ADLabel的text內(nèi)容時(shí),就會(huì)通過text的set方法將字符串轉(zhuǎn)換成可變字符串 通過可變字符串的set方法,將字符串中的字符顏色透明度都設(shè)置為0并賦值給ADLabel 并為每個(gè)字符設(shè)置一個(gè)隨機(jī)并基于動(dòng)畫時(shí)間而生成的淡出時(shí)間保存在數(shù)組中
shine方法:動(dòng)畫開啟并沒有指定完成后的操作 shineWithCompletion: 動(dòng)畫開啟并指定完成后的操作 調(diào)用shine方法后會(huì)調(diào)用shineWithCompletion,傳過去的操作為nil 在shineWithCompletion方法中會(huì)完成保存操作,并設(shè)置淡出效果為NO,而后開啟動(dòng)畫
開啟動(dòng)畫:startAnimationWithDuration 其中會(huì)獲取當(dāng)前時(shí)間為開始時(shí)間,開始時(shí)間加字體漸近時(shí)間shineDuration為結(jié)束時(shí)間 通過取消幀動(dòng)畫的暫停開啟幀動(dòng)畫updateAttributedString
幀動(dòng)畫里會(huì)獲取當(dāng)前時(shí)間用于判斷是否超出動(dòng)畫時(shí)間 遍歷可變字符串的每個(gè)字符,并修改除空格、回車(包含'\n')、tab之外的字符的透明度 透明度是否修改通過以下方式判斷: 1.淡出效果并且透明度大于0 2.不是淡出效果并且透明度小于1 3.當(dāng)前時(shí)間 - 動(dòng)畫開始時(shí)間 >= 基于淡出效果而生成的一個(gè)隨機(jī)時(shí)間 應(yīng)該更新則獲取所需透明度值 : 當(dāng)前時(shí)間 - 開始時(shí)間 - 基于淡出效果而生成的一個(gè)隨機(jī)時(shí)間 如果是淡出狀態(tài)就獲取 1 - 透明度值 修改完后設(shè)置可變字符串內(nèi)容 并判斷如果當(dāng)前時(shí)間超過動(dòng)畫結(jié)束時(shí)間,暫停幀動(dòng)畫,執(zhí)行結(jié)束操作
至此,動(dòng)畫效果完成
fadeOut: 手動(dòng)開啟淡出效果但沒有結(jié)束后的操作 fadeOutWithCompletion: 手動(dòng)開啟淡出效果并有結(jié)束后的操作 */
輸入金額大寫顯示
通過代理方法實(shí)現(xiàn),每輸入一個(gè)數(shù)字就替代成一個(gè)對(duì)應(yīng)的中文漢字。
返回程序彈出密碼框
返回程序彈出密碼框 參考巧哥(唐巧)的返回程序彈出密碼框
在appDelegate里的applicationDidEnterBackground 方法中調(diào)用 [[PasswordInputWindow sharedInstance] show];
會(huì)創(chuàng)建一個(gè)window的單列對(duì)象,并在show方法里讓其成為主window 因此會(huì)在所有圖層的上方,而UIWindow繼承UIView,可在創(chuàng)建時(shí)進(jìn)行初始化設(shè)置
文件管理器
仿寫HYFileManager HYFileManager 附帶詳解
- 沙盒目錄相關(guān)
主目錄,tmp目錄路徑可直接獲取 libraryDir通過NSSearchPathForDirectoriesInDomains Library / Preferences的目錄通過libraryDir拼接 Library / Caches的目錄通過NSSearch搜索CachesDirectory
NSSearchPathForDirectoriesInDomains 第一個(gè)參數(shù)是哪個(gè)目錄 第二個(gè)參數(shù)是搜索誰的 第三個(gè)參數(shù) ' ~ ' 路徑是否展開 ' ~ ' 路徑是詳細(xì)路徑前半段直接隱藏用' ~ '顯示
- 遍歷文件夾
通過FileManager的subpathsOfDirectoryAtPath:error:深遍歷路徑 通過FileManager的contentsOfDirectoryAtPath:error:淺遍歷路徑
- 獲取文件屬性
先通過FileManager的attributesOfItemAtPath:error:獲取路徑下文件屬性集合,而后通過key取出某個(gè)屬性
- 創(chuàng)建文件(夾)
創(chuàng)建文件夾:通過fileManager的createDirectoryAtPath:withIntermediateDirectories:attributes:error:
createDirectoryAtPath:withIntermediateDirectories:attributes:error: 第一個(gè)參數(shù)代表文件夾路徑 第二個(gè)參數(shù)代表是否允許創(chuàng)建中間目錄 第三個(gè)參數(shù)代表設(shè)置,如訪問權(quán)限、所屬用戶/用戶組。nil代表選擇系統(tǒng)默認(rèn)設(shè)置。 第四個(gè)參數(shù)代表錯(cuò)誤信息
創(chuàng)建文件:通過fileManager的createFileAtPath:contents:attributes: 如果文件夾路徑不存在,則先創(chuàng)建文件夾。通過自定義方法directoryAtPath判斷 如果創(chuàng)建失敗返回NO,沒有錯(cuò)誤信息 如果文件存在但不想復(fù)寫則返回YES 先創(chuàng)建文件,而后判斷是否寫入內(nèi)容 content代表寫入的內(nèi)容,如果有則寫入
獲取文件修改時(shí)間、創(chuàng)建時(shí)間則先獲取文件的所有屬性 通過KeyNSFileModificationDate(修改) NSFileCreationDate(創(chuàng)建) 獲取到所需的修改時(shí)間、創(chuàng)建時(shí)間
- 刪除文件(夾)
刪除文件/文件夾 通過fileManager的removeItemAtPath:error:直接刪除這個(gè)路徑文件/文件夾
清空Caches文件夾: 先淺遍歷cache文件夾,獲取其下所有文件與目錄 而后拼接在cache路徑后,通過自定義方法removeItemAtPath:移除 讓一個(gè)BOOL值為YES的isSuccess &= 移除后的結(jié)果值 則有一個(gè)移除錯(cuò)誤就會(huì)為NO
清空tmp文件夾同上
- 復(fù)制文件(夾)
復(fù)制文件/文件夾 先要保證源文件路徑存在,不然通過NSException拋出異常 而后獲取路徑上的文件夾,如果文件夾路徑不存在則創(chuàng)建文件夾路徑,創(chuàng)建失敗直接返回NO 而后判斷是否允許重寫,如果允許重寫且文件存在則先刪掉要重寫的文件
調(diào)用fileManager的copyItemAtPath:toPath:error:復(fù)制文件
- 移動(dòng)文件(夾)
同復(fù)制文件夾,只是移動(dòng)時(shí)若文件存在且不允許重寫則把源文件移除而后返回YES 如果文件存在且允許重寫則移除要重寫的文件而后移動(dòng)源文件
調(diào)用fileManager的moveItemAtPath:toPath:error:移動(dòng)源文件
- 根據(jù)URL獲取文件名
根據(jù)文件路徑獲取文件名稱,是否需要后綴 直接通過字符串的lastPathComponent方法獲取文件名稱 若不需要后綴則通過stringByDeletingPathExtension刪除掉后綴
獲取文件所在的文件夾路徑 直接通過字符串的stringByDeletingLastPathComponent刪除最后一個(gè)目錄 也就是最后一個(gè)' / '之后的內(nèi)容包括' / '
根據(jù)文件路徑獲取文件擴(kuò)展類型 直接通過字符串的pathExtension獲取擴(kuò)展名 會(huì)從最后面截取' . '之后的內(nèi)容
- 判斷文件(夾)是否存在
判斷文件路徑是否存在直接通過fileManager的fileExistsAtPath:方法判斷
判斷路徑是否為空(判斷條件是文件大小為0, 或者是文件夾下沒有子文件) 目標(biāo)路徑是一個(gè)文件并且文件大小是0 或 目標(biāo)路徑是一個(gè)文件夾并且文件夾下沒有子文件
判斷目錄是否是文件夾,通過文件屬性NSFileType得值是否為NSFileTypeDirectory
判斷目錄是否是文件,通過文件屬性NSFileType得值是否為NSFileTypeRegular
可執(zhí)行、可讀、可寫通過fileManager的isExecutableFileAtPath、 isReadableFileAtPath、isWritableFileAtPath判斷
- 獲取文件(夾)大小
獲取文件/目錄大小 通過屬性的key值NSFileSize獲取 只是獲取文件大小時(shí),若目標(biāo)路徑不是文件則返回nil
獲取文件夾大小時(shí)先判斷路徑是否為文件夾,不是則返回nil 而后獲取文件夾的目錄大小,再深遍歷文件夾累加目錄和文件、子文件夾大小
- 寫入文件內(nèi)容
寫入文件內(nèi)容時(shí),如果文件不存在就異常警告并返回NO 如果文件路徑不存在則返回NO 如果文件存在,路徑存在就根據(jù)文件所屬類型轉(zhuǎn)換并寫入 (不轉(zhuǎn)換就是NSObject類型無法調(diào)用write方法) atomically是否允許持續(xù)寫入 其中JSON格式轉(zhuǎn)變?yōu)樽值漕愋?UIImage格式通過UIImagePNGRepresentation轉(zhuǎn)變?yōu)镹SData類型 NSCoding類型通過[NSKeyedArchiver archiveRootObject:content toFile:path] 如果類型都不對(duì)則異常提示并返回NO
- private methods
轉(zhuǎn)換錯(cuò)誤信息,如果錯(cuò)誤信息為空則返回YES。不過沒有用到 //轉(zhuǎn)換大小格式,顯示如:2KB 或4.26MB 或1002.25GB