一.修改按钮高亮状态(xib)
用xib设置按钮的高亮状态,首先Type类型为Custom,修改Sate Config(明显是状态嘛),改为Highlighted,注意,要选择Background的图片(不要选Image来设置啊,否则这个按钮左边是图片,右边是文字。。。这个是默认的,否则还得改什么contentEdgeInsets,怪麻烦的)。
二.沙盒
1.沙盒简介
iOS APP可以在自己的沙盒里读写文件,但是,不可以访问其他APP的沙盒。每一个APP都是一个信息孤岛,相互是不可以进行通信的,唯独可以通过URL Scheme。沙盒里面的文件可以是照片、声音文件、文本、属性列表等。
每一个APP都有一个存储空间,就是沙盒。
APP之间不能相互通信。
沙盒根目录结构:Documents、Library、temp。
简述一下Documents、Library、tmp的区别:
Documents:用于存储用户数据,iTunes备份和恢复的时候会包括此目录,所以,苹果建议将程序中建立的或在程序中浏览到的文件数据保存在该目录下。
Library:包含两个子目录:Caches 和 Preferences。Caches用来存放用户需要换成的文件。Preferences是APP的偏好设置,可以通过NSUserDefaults来读取和设置。
tmp:用于存放临时文件,这个可以放一些当APP退出后不再需要的文件
打开模拟器沙盒方法
方法一:前往文件夹打开
/Users/wf/Library/Developer/CoreSimulator/Devices/29CABB1F-3063-4F2F-869B-ACFCAD07D99C/data/Containers/Data/Application/
直接在Finder->前往->前往文件夹,输入上面的内容即可。
方法二:通过Finder一步步查找
模拟器上的APP的沙盒实在用户目录下的资源库里面,但是资源库是隐藏文件夹。所以查看沙盒之前,现将隐藏文件夹显示出来。显示隐藏文件的命令:
defaults write com.apple.finder AppleShowAllFiles -bool true
用心的童鞋会发现,隐藏隐藏文件的命令:
defaults write com.apple.finder AppleShowAllFiles -bool false
获取沙盒根目录
//获取沙盒根目录
NSString*directory=NSHomeDirectory();
获取Documents路径
//获取Documents路径
NSArray*paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
NSString*path=[pathsobjectAtIndex:0];
获取Documents文件夹目录,第一个参数是说明获取Doucments文件夹目录,第二个参数说明是在当前应用沙盒中获取。
获取Library路径
//获取Library路径
NSArray*paths=NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,NSUserDomainMask,YES);
NSString*path=[pathsobjectAtIndex:0];
NSLog(@"path:%@",path);
获取Caches路径
//获取Caches路径
NSArray*paths=NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES);
NSString*path=[pathsobjectAtIndex:0];
NSLog(@"path:%@",path);
获取tmp路径
NSString*tmp=NSTemporaryDirectory();
NSLog(@"tmp:%@",tmp);
三.文件操作(今天主要是计算文件大小)
1.获取单个文件所占空间
//单个文件的大小
- (longlong)fileSizeAtPath:(NSString*)filePath{
NSFileManager* manager = [NSFileManager defaultManager];
if([manager fileExistsAtPath:filePath]){
//RXLog(@"文件名称是%@,文件大小是%llu", filePath, [[manager attributesOfItemAtPath:filePath error:nil] fileSize]);
return[[managerattributesOfItemAtPath:filePatherror:nil]fileSize];
}
return0;
}
// filePath是文件路径
2.Cache里面所有文件所占空间
- (CGFloat)folderSizeAtPath:(NSString*)folderPath{
NSFileManager *manager = [NSFileManager defaultManager];
if(![manager fileExistsAtPath:folderPath]){
return0;
}
NSEnumerator *childFilesEnumerator = [[manager subpathsAtPath:folderPath]objectEnumerator];
NSString *fileName =nil;
long long folderSize =0;
while((fileName = [childFilesEnumerator nextObject]) !=nil) {
NSString *fileAbsolutePath = [folderPath stringByAppendingPathComponent:fileName];
folderSize += [self fileSizeAtPath:fileAbsolutePath];
}
returnfolderSize / (1024*1024);
}
3.清除文件
- (void)clearFileCache{
//放子线程里面去
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{
NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES)objectAtIndex:0];
NSArray *files = [[NSFileManager defaultManager]subpathsAtPath:cachePath];
//RXLog(@"缓存目录是%@,文件是%@", cachePath, files);
NSError *error;
for(NSString *str in files){
NSString *path = [cachePath stringByAppendingPathComponent:str];
if([[NSFileManager defaultManager]fileExistsAtPath:path]){
[[NSFileManager defaultManager]removeItemAtPath:path error:&error];
}
}
dispatch_async(dispatch_get_main_queue(), ^{
[self clearCacheSuccess];
});
});
}
4.更新界面
- (void)clearCacheSuccess{
//RXLog(@"清除成功");
self.allFileSize=0;
[self.tableViewreloadData];
[MBProgressHUDshow:@"清除缓存成功!"displayTime:1.5];
}
注意:清除操作方子线程里面,但是更新UI必须放在主线程里面,否则会操作失败。
5.cell里面数据重叠的问题
以前用这个方法解决,但是,这个方法太low了。。。把contentView里面的控件全部删除,再添加进来。
while([cell.contentView.subviews lastObject] !=nil) {
[(UIView*)[cell.contentView.subviewslastObject]removeFromSuperview];
}
然后今天是把这个控件给了self,然后加载的时候只是针对这个控件做一些操作。
self.cacheSizeLabel.text=nil; 加载前先置为空。不知道这个方法是否好用。
最后,我们总是在尝试中进步,今晚接着看小码哥的视频,百思不得姐下载不下来~~先看基础知识吧~~