详解统一在最下方,或查看git文件中的README
字体的渐隐渐现、渐进渐出
- 地址: 字体的渐隐渐现、渐进渐出
金额的大写显示
- 地址: 金额的大写显示
1.gif
返回程序弹出密码框
- 地址: 返回程序弹出密码框
文件管理器
- 地址:文件管理器
旋转的tableView
- 地址:[旋转的tableView](https://github.com/DrunkenMouse/rotateTableView)
- 这个有必要先说下,将一个tableView旋转90度,内部的tableViewCell在逆转90度。达到tableView横向滚动,内部cell上挂载一个新的tableView用于显示。感谢NSLog的帮助。
Demo详解
字体的渐隐渐现、渐进渐出
仿RQShineLabel RQShineLabel
设置ADLabel的text内容时,就会通过text的set方法将字符串转换成可变字符串 通过可变字符串的set方法,将字符串中的字符颜色透明度都设置为0并赋值给ADLabel 并为每个字符设置一个随机并基于动画时间而生成的淡出时间保存在数组中
shine方法:动画开启并没有指定完成后的操作 shineWithCompletion: 动画开启并指定完成后的操作 调用shine方法后会调用shineWithCompletion,传过去的操作为nil 在shineWithCompletion方法中会完成保存操作,并设置淡出效果为NO,而后开启动画
开启动画:startAnimationWithDuration 其中会获取当前时间为开始时间,开始时间加字体渐近时间shineDuration为结束时间 通过取消帧动画的暂停开启帧动画updateAttributedString
帧动画里会获取当前时间用于判断是否超出动画时间 遍历可变字符串的每个字符,并修改除空格、回车(包含'\n')、tab之外的字符的透明度 透明度是否修改通过以下方式判断: 1.淡出效果并且透明度大于0 2.不是淡出效果并且透明度小于1 3.当前时间 - 动画开始时间 >= 基于淡出效果而生成的一个随机时间 应该更新则获取所需透明度值 : 当前时间 - 开始时间 - 基于淡出效果而生成的一个随机时间 如果是淡出状态就获取 1 - 透明度值 修改完后设置可变字符串内容 并判断如果当前时间超过动画结束时间,暂停帧动画,执行结束操作
至此,动画效果完成
fadeOut: 手动开启淡出效果但没有结束后的操作 fadeOutWithCompletion: 手动开启淡出效果并有结束后的操作 */
输入金额大写显示
通过代理方法实现,每输入一个数字就替代成一个对应的中文汉字。
返回程序弹出密码框
返回程序弹出密码框 参考巧哥(唐巧)的返回程序弹出密码框
在appDelegate里的applicationDidEnterBackground 方法中调用 [[PasswordInputWindow sharedInstance] show];
会创建一个window的单列对象,并在show方法里让其成为主window 因此会在所有图层的上方,而UIWindow继承UIView,可在创建时进行初始化设置
文件管理器
仿写HYFileManager HYFileManager 附带详解
- 沙盒目录相关
主目录,tmp目录路径可直接获取 libraryDir通过NSSearchPathForDirectoriesInDomains Library / Preferences的目录通过libraryDir拼接 Library / Caches的目录通过NSSearch搜索CachesDirectory
NSSearchPathForDirectoriesInDomains 第一个参数是哪个目录 第二个参数是搜索谁的 第三个参数 ' ~ ' 路径是否展开 ' ~ ' 路径是详细路径前半段直接隐藏用' ~ '显示
- 遍历文件夹
通过FileManager的subpathsOfDirectoryAtPath:error:深遍历路径 通过FileManager的contentsOfDirectoryAtPath:error:浅遍历路径
- 获取文件属性
先通过FileManager的attributesOfItemAtPath:error:获取路径下文件属性集合,而后通过key取出某个属性
- 创建文件(夹)
创建文件夹:通过fileManager的createDirectoryAtPath:withIntermediateDirectories:attributes:error:
createDirectoryAtPath:withIntermediateDirectories:attributes:error: 第一个参数代表文件夹路径 第二个参数代表是否允许创建中间目录 第三个参数代表设置,如访问权限、所属用户/用户组。nil代表选择系统默认设置。 第四个参数代表错误信息
创建文件:通过fileManager的createFileAtPath:contents:attributes: 如果文件夹路径不存在,则先创建文件夹。通过自定义方法directoryAtPath判断 如果创建失败返回NO,没有错误信息 如果文件存在但不想复写则返回YES 先创建文件,而后判断是否写入内容 content代表写入的内容,如果有则写入
获取文件修改时间、创建时间则先获取文件的所有属性 通过KeyNSFileModificationDate(修改) NSFileCreationDate(创建) 获取到所需的修改时间、创建时间
- 删除文件(夹)
删除文件/文件夹 通过fileManager的removeItemAtPath:error:直接删除这个路径文件/文件夹
清空Caches文件夹: 先浅遍历cache文件夹,获取其下所有文件与目录 而后拼接在cache路径后,通过自定义方法removeItemAtPath:移除 让一个BOOL值为YES的isSuccess &= 移除后的结果值 则有一个移除错误就会为NO
清空tmp文件夹同上
- 复制文件(夹)
复制文件/文件夹 先要保证源文件路径存在,不然通过NSException抛出异常 而后获取路径上的文件夹,如果文件夹路径不存在则创建文件夹路径,创建失败直接返回NO 而后判断是否允许重写,如果允许重写且文件存在则先删掉要重写的文件
调用fileManager的copyItemAtPath:toPath:error:复制文件
- 移动文件(夹)
同复制文件夹,只是移动时若文件存在且不允许重写则把源文件移除而后返回YES 如果文件存在且允许重写则移除要重写的文件而后移动源文件
调用fileManager的moveItemAtPath:toPath:error:移动源文件
- 根据URL获取文件名
根据文件路径获取文件名称,是否需要后缀 直接通过字符串的lastPathComponent方法获取文件名称 若不需要后缀则通过stringByDeletingPathExtension删除掉后缀
获取文件所在的文件夹路径 直接通过字符串的stringByDeletingLastPathComponent删除最后一个目录 也就是最后一个' / '之后的内容包括' / '
根据文件路径获取文件扩展类型 直接通过字符串的pathExtension获取扩展名 会从最后面截取' . '之后的内容
- 判断文件(夹)是否存在
判断文件路径是否存在直接通过fileManager的fileExistsAtPath:方法判断
判断路径是否为空(判断条件是文件大小为0, 或者是文件夹下没有子文件) 目标路径是一个文件并且文件大小是0 或 目标路径是一个文件夹并且文件夹下没有子文件
判断目录是否是文件夹,通过文件属性NSFileType得值是否为NSFileTypeDirectory
判断目录是否是文件,通过文件属性NSFileType得值是否为NSFileTypeRegular
可执行、可读、可写通过fileManager的isExecutableFileAtPath、 isReadableFileAtPath、isWritableFileAtPath判断
- 获取文件(夹)大小
获取文件/目录大小 通过属性的key值NSFileSize获取 只是获取文件大小时,若目标路径不是文件则返回nil
获取文件夹大小时先判断路径是否为文件夹,不是则返回nil 而后获取文件夹的目录大小,再深遍历文件夹累加目录和文件、子文件夹大小
- 写入文件内容
写入文件内容时,如果文件不存在就异常警告并返回NO 如果文件路径不存在则返回NO 如果文件存在,路径存在就根据文件所属类型转换并写入 (不转换就是NSObject类型无法调用write方法) atomically是否允许持续写入 其中JSON格式转变为字典类型 UIImage格式通过UIImagePNGRepresentation转变为NSData类型 NSCoding类型通过[NSKeyedArchiver archiveRootObject:content toFile:path] 如果类型都不对则异常提示并返回NO
- private methods
转换错误信息,如果错误信息为空则返回YES。不过没有用到 //转换大小格式,显示如:2KB 或4.26MB 或1002.25GB
网友评论