有什么推荐做简历的网站,wordpress自定义末班,网站建设哪儿好,门店会员管理系统app热很。。热很。。。。夏天的城市只有热浪没有情怀。。。
来吧#xff0c;come on。。。 引用第三方库#xff1a; pod SSZipArchive 开发实现#xff1a;
一、控制器实现
头文件控制器定义#xff1a; //
// ZipRarViewController.h
//
// Created by carbonzhao on 2…热很。。热很。。。。夏天的城市只有热浪没有情怀。。。
来吧come on。。。 引用第三方库 pod SSZipArchive 开发实现
一、控制器实现
头文件控制器定义 //
// ZipRarViewController.h
//
// Created by carbonzhao on 2024/5/28.
//#import IMBaseClassViewController.hNS_ASSUME_NONNULL_BEGINinterface ZipRarViewController : IMBaseClassViewController//可为本地路径亦可为远端路径
property (nonatomic,strong) NSURL *filePath;//路径标记相同标记解压过的不再解压
property (nonatomic,strong) NSString *fileFlag;endNS_ASSUME_NONNULL_END实现文件定义
//
// ZipRarViewController.m
//
// Created by carbonzhao on 2024/5/28.
//#import ZipRarViewController.h
#import SSZipArchive.h
#import UIBreadView.hNS_ASSUME_NONNULL_BEGINinterface UINextTreeView : UIView
{
}
- (void)setDataSource:(NSMutableArray*)list checkActionBlock:(void (^)(NSDictionary *e))checkActionBlock;
endNS_ASSUME_NONNULL_ENDtypedef void (^SubTreeViewCheckedTreeBlock)(NSDictionary *e);interface UINextTreeView ()UITableViewDelegate,UITableViewDataSource
{NSMutableArray *dataList;UITableView *tview;
}
property (nonatomic,copy) SubTreeViewCheckedTreeBlock ClickTreeBlock;
endimplementation UINextTreeView- (instancetype)initWithFrame:(CGRect)frame
{if (self [super initWithFrame:frame]){[self setupUI];}return self;
}- (void)setFrame:(CGRect)frame
{[super setFrame:frame];if (tview){[tview setFrame:CGRectMake(0, 0, frame.size.width, frame.size.height)];}
}- (void)setupUI
{dataList [[NSMutableArray alloc] initWithCapacity:0];tview [[UITableView alloc] initWithFrame:self.bounds];tview.backgroundColor DSTextPlaceColor;tview.dataSource self;tview.delegate self;
// tview.tableFooterView [UIView new];tview.separatorColor [UIColor clearColor];tview.estimatedRowHeight 0;tview.estimatedSectionFooterHeight 0;tview.estimatedSectionHeaderHeight 0;[tview setShowsVerticalScrollIndicator:NO];[tview setShowsHorizontalScrollIndicator:NO];
// [tview setBackgroundColor:[UIColor redColor]];
// tview.mj_header [MJRefreshNormalHeader headerWithRefreshingBlock:^{
// [weakSelf getListAllDing:refresh];
// }];[self addSubview:tview];
}#pragma mark - action
- (void)setDataSource:(NSMutableArray*)list checkActionBlock:(void (^)(NSDictionary *e))checkActionBlock
{[self setClickTreeBlock:checkActionBlock];[dataList addObjectsFromArray:list];[tview reloadData];
}- (void)reloadView
{dispatch_async(dispatch_get_main_queue(), ^{[self-tview reloadData];});
}- (NSString *)docIcon:(NSString *)ext
{NSString *ex [ext lowercaseString];if ([[xls,xlsx] containsObject:ex]){return icon_excel_new;}else if ([[doc,docx] containsObject:ex]){return icon_word_new;}else if ([[pdf] containsObject:ex]){return icon_pdf_new;}else if ([[txt] containsObject:ex]){return icon_txt_new;}else if ([[png,jpg,jpeg] containsObject:ex]){return icon_img_new;}else if ([[mov,mp4,avi,mpeg,mkv,3gp,wmv,rmvb] containsObject:ex]){return icon_mp4_new;}else if ([[mp3,wav] containsObject:ex]){return icon_mp3;}else if ([[zip,rar] containsObject:ex]){return icon_zip_new;}return ;
}#pragma mark - tableView
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{return 1;
}- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{return dataList.count;
}- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{CGFloat height 58;return height;
}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{UITableViewCell *cell [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];CGFloat height [self tableView:tableView heightForRowAtIndexPath:indexPath];if (height 0){CGFloat x 20;NSMutableDictionary *e [dataList objectAtIndex:indexPath.row];kWeakSelf(self)NSString *dicon [e boolForKey:isDir]?icon_folder_icon:[self docIcon:[e stringForKey:ext]];CGRect rt CGRectMake(x, (height-30)/2, 30, 30);UIImageView *dirIcon [[UIImageView alloc] initWithFrame:rt];[dirIcon setImage:IMAGE_INIM_NAME(dicon)];[cell.contentView addSubview:dirIcon];x (rt.size.width 10);NSString *name [e stringForKey:fileName];rt CGRectMake(x, 0, tableView.frame.size.width-20-x-40, height);UILabel *label [[UILabel alloc] initWithFrame:rt];[label setFont:Font_size(16)];[label setTextColor:RGBA(10, 10, 10, 1)];[label setText:name];[label setTextAlignment:NSTextAlignmentLeft];[cell.contentView addSubview:label];if ([e boolForKey:isDir]){rt CGRectMake(tableView.width-34, (height-14)/2, 14, 14);UIImageView *iconView [[UIImageView alloc] initWithFrame:rt];[iconView setImage:IMAGE_INIM_NAME(icon_arrow)];[cell.contentView addSubview:iconView];}rt CGRectMake(25, height-1, tableView.frame.size.width-25, 1);UIImageView *iconView [[UIImageView alloc] initWithFrame:rt];[iconView setBackgroundColor:RGB(245, 245, 245)];[cell.contentView addSubview:iconView];rt CGRectMake(0, 0, tableView.frame.size.width, height);iconView [[UIImageView alloc] initWithFrame:rt];[iconView setBackgroundColor:RGB(245, 245, 245)];[cell setSelectedBackgroundView:iconView];}[cell setSelectionStyle:UITableViewCellSelectionStyleNone];return cell;
}- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{[tableView deselectRowAtIndexPath:indexPath animated:YES];NSMutableDictionary *e [dataList objectAtIndex:indexPath.row];self.ClickTreeBlock(e);
}
endinterface ZipRarViewController ()
property (nonatomic,strong) UIBreadView *breview;
endimplementation ZipRarViewController- (instancetype)init
{if (self [super init]){}return self;
}- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view.self.breview [UIBreadView breadViewWithFrame:CGRectMake(0, 0, ScreenWidth, self.safeAreaHeight) viewType:UIBreadViewBreadType];[self.view addSubview:self.breview];NSString *fileName [self.filePath lastPathComponent]; //获取文件名称[self setTitle:[NSString stringWithFormat:%预览,fileName]];if ([self.filePath.absoluteString hasPrefix:http]){WeakSelf(self);[self showToastWithKeepAliveBlock:^(UIToastFenceView *waitView) {[waitView setViewMode:UIToastFenceViewModeCircle];[waitView setTitleText:下载中...];NSURLSessionConfiguration *configuration [NSURLSessionConfiguration defaultSessionConfiguration];AFURLSessionManager *manager [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];NSURLRequest *request [NSURLRequest requestWithURL:self.filePath];NSURLSessionDownloadTask *downloadTask [manager downloadTaskWithRequest:request progress:^(NSProgress *downloadProgress){CGFloat completedUnitCount downloadProgress.completedUnitCount*1.0;CGFloat totalUnitCount downloadProgress.totalUnitCount*1.0;CGFloat percent completedUnitCount/totalUnitCount;[waitView setProgress:percent];if (percent 1.0){[waitView setViewMode:UIToastFenceViewModeText];[waitView setTitleText:下载完成];[waitView dismiss:1.5];}} destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {NSURL *url [NSURL fileURLWithPath:userDocuments(docPathFile, fileName)];return url;} completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {if (error) {[waitView setViewMode:UIToastFenceViewModeText];[waitView setTitleText:下载失败];[waitView dismiss:1.5];}else {[waitView dismiss];NSURL *url [NSURL fileURLWithPath:userDocuments(docPathFile, fileName)];weakSelf.filePath url;[weakSelf toReadySource];}}];[downloadTask resume];}];}else{[self toReadySource];}
}#pragma mark - 解压文件
- (void)toReadySource
{NSString *path [self.filePath path];NSString *fileName [[[self.filePath lastPathComponent] componentsSeparatedByString:.] firstObject];NSString *to userDocuments(zipsPathFile, );to [to stringByAppendingPathComponent:[NSString stringWithFormat:%_%,self.fileFlag,fileName]];WeakSelf(self);
// [[NSFileManager defaultManager] removeItemAtPath:to error:nil];if ([[NSFileManager defaultManager] fileExistsAtPath:to]){[self showToastBlock:^(UIToastFenceView *waitView) {[weakSelf readFiles:[to stringByAppendingPathComponent:fileName] fileName:fileName];}];}else{[self showToastBlock:^(UIToastFenceView *waitView){[waitView setTitleText:解压中...];BOOL flag [SSZipArchive unzipFileAtPath:path toDestination:to];if (flag){[weakSelf readFiles:[to stringByAppendingPathComponent:fileName] fileName:fileName];}else{[waitView setTitleText:解压失败];[waitView waitForSeconds];}}];}
}- (void)readFiles:(NSString *)path fileName:(NSString *)fileName
{NSMutableArray *list [NSMutableArray arrayWithCapacity:0];NSFileManager *fm [NSFileManager defaultManager];NSArray *subFilePath [fm contentsOfDirectoryAtPath:path error:nil];for (NSString * fileName in subFilePath){if (![fileName isEqualToString:.DS_Store]){NSMutableDictionary *e [[NSMutableDictionary alloc] initWithCapacity:0];[e setObject:path forKey:path];[e setObject:fileName forKey:fileName];BOOL isDir NO;[fm fileExistsAtPath:[path stringByAppendingPathComponent:fileName] isDirectory: isDir];[e setObject:boolToStr(isDir) forKey:isDir];[e setObject:[fileName pathExtension] forKey:ext];[list addObject:e];}}WeakSelf(self);dispatch_sync_on_main_queue(^{NSBreadData *d [[NSBreadData alloc] init];[d setTitle:fileName];[self.breview addBreadViewTitle:d withConfigBlock:^UIView * _Nullable(NSInteger index, BOOL * _Nonnull useAnimation){UINextTreeView *b [[UINextTreeView alloc] init];[b setDataSource:list checkActionBlock:^(NSDictionary *e) {NSString *p [e stringForKey:path];NSString *n [e stringForKey:fileName];if ([e boolForKey:isDir]){p [p stringByAppendingPathComponent:n];[weakSelf readFiles:p fileName:n];}else{if (weakSelf.delegateBlock){weakSelf.delegateBlock(e);}}}];return b;}];});
}
end二、面包屑实现(控制器内部实现切换子页面视图)
头文件源码 //
// UIBreadView.h
//
// Copyright © 2021 dtx. All rights reserved.
//#import UIKit/UIKit.hNS_ASSUME_NONNULL_BEGINinterface NSBreadData : NSObject
property (nonatomic,strong) NSString *title;
endtypedef NS_ENUM(NSInteger,UIBreadViewType){UIBreadViewBreadType0, //面包屑模式默认UIBreadViewSearchType, //搜索模式UIBreadViewHyborType, //混合模式(面包屑搜索均显示)
};interface UIBreadView : UIView//仅有一个面包屑及动画切换的容器(UIBreadView *)breadViewWithFrame:(CGRect)frame viewType:(UIBreadViewType)viewType;//有一个面包屑及动画切换的容器及可添加的不进行动画切换的容器(UIBreadView *)breadViewWithFrame:(CGRect)frame viewType:(UIBreadViewType)viewType positionFixView:(UIView * (^)(void))positionFixView;- (void)addBreadViewTitle:(NSBreadData *)data withConfigBlock:(UIView* _Nullable (^)(NSInteger index,BOOL *useAnimation)) setupBlock;//block返回YES则隐藏面包屑
- (void)registerSelectActionBlock:(BOOL (^)(NSInteger index))actionBlock;- (void)registerSearchKeywordBlock:(void (^)(NSString *keyword,BOOL willResign))aBlock;//搜索UI自定义
- (void)registerConfigurationSearchInterfaceBlock:(void (^)(UIView *pview))aBlock;- (BOOL)canPopToOneView;
- (CGFloat)breadNavigatorHeight;
- (CGFloat)breadNavigatory;- (void)setHiddenNavigatorBreadHidden:(BOOL)flag;- (UIView *)parentView:(UIView *)selfView;
- (UIView *)currentView;- (void)resignSearchFieldResponder;- (void)setReturnKeyType:(UIReturnKeyType)type;
//面包屑清除数据回归初始状态
- (void)breadcrumbClearingData;
endNS_ASSUME_NONNULL_END实现文件 //
// UIBreadView.m
// Copyright © 2021 dtx. All rights reserved.
//#import UIBreadView.h
#import NSExtentionSloter.h
#import SearchBarDisplayCenter.h
#import imHeaders.htypedef BOOL (^UIBreadViewActionBlock)(NSInteger index);typedef void (^UIBreadViewSearchKeywordBlock)(NSString *keyword,BOOL willResign);interface NSBreadData ()
property (nonatomic,assign) BOOL isSelected;property (nonatomic,assign) CGFloat itemWidth;//如果有sourceView则内部处理点击事件切换页面如果无将事件反馈到控制器处理
property (nonatomic,weak) UIView *sourceView;
endimplementation NSBreadData
synthesize title,sourceView,itemWidth,isSelected;
endinterface UIBreadView ()UICollectionViewDataSource,UICollectionViewDelegate,UICollectionViewDelegateFlowLayout,SearchBarDisplayCenterDelegate
{UICollectionView *textView;UIView *contentView;NSInteger lastHiglightedRow;NSMutableArray *dataList;
}property (nonatomic,copy) UIBreadViewActionBlock actionBlock;property (nonatomic,copy) UIBreadViewSearchKeywordBlock searchBlock;//是否显示搜索组件进行搜索,如果显示了搜索则不再显示面包屑
property (nonatomic,assign) UIBreadViewType viewWorkType;property (nonatomic,strong) UIView *fixedContainerView;property (nonatomic, strong) UIImageView *sepView;
endimplementation UIBreadView
synthesize actionBlock,viewWorkType; (UIBreadView *)breadViewWithFrame:(CGRect)frame viewType:(UIBreadViewType)viewType
{UIBreadView *view [[UIBreadView alloc] initWithFrame:frame];[view setViewWorkType:viewType];[view setupUI];return view;
} (UIBreadView *)breadViewWithFrame:(CGRect)frame viewType:(UIBreadViewType)viewType positionFixView:(UIView * (^)(void))positionFixView
{UIBreadView *view [[UIBreadView alloc] initWithFrame:frame];[view setViewWorkType:viewType];if (positionFixView){UIView *fview positionFixView();[view setFixedContainerView:fview];}[view setupUI];return view;
}- (instancetype)initWithFrame:(CGRect)frame
{if (self [super initWithFrame:frame]){self-lastHiglightedRow -1;self.viewWorkType UIBreadViewBreadType;}return self;
}- (void)setFrame:(CGRect)frame
{[super setFrame:frame];CGRect rt contentView.frame;rt.size.height frame.size.height-rt.origin.y;[contentView setFrame:rt];for (UIView *aview in contentView.subviews){[aview setFrame:CGRectMake(0, 0, frame.size.width, rt.size.height)];}
}- (void)setupUI{dataList [[NSMutableArray alloc] initWithCapacity:0];CGRect rt CGRectMake(20, 0, self.bounds.size.width-40, 44);UICollectionViewFlowLayout *flowLayout[[UICollectionViewFlowLayout alloc] init];[flowLayout setScrollDirection:UICollectionViewScrollDirectionHorizontal];textView [[UICollectionView alloc] initWithFrame:rt collectionViewLayout:flowLayout];
// textView.backgroundColor [UIColor yellowColor];[textView setDelegate:self];[textView setDataSource:self];
// [textView setPagingEnabled:YES];[textView setBackgroundColor:[UIColor clearColor]];[textView setShowsHorizontalScrollIndicator:NO];[textView setShowsVerticalScrollIndicator:NO];[textView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:dequeueIdentifier];[self addSubview:textView];CGFloat y rt.origin.yrt.size.height;if (self.viewWorkType UIBreadViewSearchType){[textView setHidden:YES];CGRect rt CGRectMake(0, 0, ScreenWidth, 50);UIView *header [[UIView alloc]initWithFrame:rt];header.backgroundColor [UIColor whiteColor];[header setTag:404];[self addSubview:header];SearchBarDisplayCenter *searchBar [[SearchBarDisplayCenter alloc]initWithFrame:CGRectMake(0, 3, ScreenWidth, 47)];searchBar.userInteractionEnabled YES;searchBar.placeholderStr 搜索;[searchBar breadChangeFrameAndSearchIcon];// searchBar.seachIconIV.image [UIImage imageInImBundle:bread_search];
//
// [searchBar.seachIconIV mas_updateConstraints:^(MASConstraintMaker *make) {
//
// make.width.mas_equalTo(17);
// make.height.mas_equalTo(17);
// }];
//
// searchBar.placeholderColor colorFromText(#999999);[searchBar setTag:405];searchBar.backgroundColor [UIColor whiteColor];[searchBar setDelegate:self];[header addSubview:searchBar];y rt.origin.yrt.size.height;}else if (self.viewWorkType UIBreadViewHyborType){rt CGRectMake(0, 0, ScreenWidth, 50);UIView *header [[UIView alloc]initWithFrame:rt];header.backgroundColor [UIColor whiteColor];[header setTag:404];[self addSubview:header];SearchBarDisplayCenter *searchBar [[SearchBarDisplayCenter alloc]initWithFrame:CGRectMake(0, 3, ScreenWidth, 47)];[searchBar setTag:405];searchBar.userInteractionEnabled YES;searchBar.placeholderStr 搜索;[searchBar breadChangeFrameAndSearchIcon];[searchBar setDelegate:self];[header addSubview:searchBar];y rt.origin.yrt.size.height;rt textView.frame;rt.origin.y y;[textView setFrame:rt];y rt.origin.yrt.size.height;}[textView setDataObject:NSStringFromCGRect(textView.frame)];rt CGRectMake(0, y, self.bounds.size.width, 10);UIImageView *sepView [[UIImageView alloc] initWithFrame:rt];self.sepView sepView;[sepView setBackgroundColor:DSTextPlaceColor];[self addSubview:sepView];y rt.origin.yrt.size.height;if (self.fixedContainerView){rt self.fixedContainerView.frame;rt.origin.y y;[self.fixedContainerView setFrame:rt];[self addSubview:self.fixedContainerView];y rt.origin.yrt.size.height;}rt CGRectMake(0, y, self.bounds.size.width, self.bounds.size.height- (rt.origin.yrt.size.height));contentView [[UIView alloc] initWithFrame:rt];[contentView setBackgroundColor:[UIColor whiteColor]];[contentView setTag:90001];[self addSubview:contentView];
}- (void)addBreadViewTitle:(NSBreadData *)data withConfigBlock:(UIView* _Nullable (^)(NSInteger index,BOOL *useAnimation)) setupBlock
{WeakSelf(self);__weak typeof(dataList) thisDataList dataList;__weak typeof(textView) thisTextView textView;__weak typeof(contentView) thisContentView contentView;[textView performBatchUpdates:^{CGFloat w [data.title stringSizeWithFont:[UIFont systemFontOfSize:14]].width;if (thisDataList.count 0){w 28;}data.itemWidth w;[data setIsSelected:NO];[thisDataList addObject:data];[thisTextView insertItemsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:thisDataList.count-1 inSection:0]]];if (thisDataList.count 1){NSBreadData *e [thisDataList objectAtIndex:thisDataList.count-2];[e setIsSelected:YES];self-lastHiglightedRow thisDataList.count-3;if (self-lastHiglightedRow -1){
// e [dataList objectAtIndex:lastHiglightedRow];
// [e setIsSelected:NO];
//
// [textView reloadItemsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:lastHiglightedRow inSection:0]]];}[thisTextView reloadItemsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:thisDataList.count-2 inSection:0]]];}} completion:^(BOOL finished) {}];if (setupBlock){NSInteger count contentView.subviews.count;
// for (NSInteger idx0;idxcontentView.subviews.count;idx)
// {
// UIView *view [contentView.subviews objectAtIndex:idx];
// CGRect rt view.frame;
// rt.origin.x - (count-idx)*self.bounds.size.width;
// [view setFrame:rt];
// }BOOL useAnimation YES;UIView *view setupBlock(count,useAnimation);__weak typeof(view) thisView view;data.sourceView view;if (view){CGRect rt view.frame;rt.origin.x thisContentView.subviews.count0?weakSelf.bounds.size.width:0;rt.size thisContentView.frame.size;[view setFrame:rt];[thisContentView addSubview:thisView];if (thisContentView.subviews.count0){if (useAnimation){[UIView animateWithDuration:0.3 animations:^{CGRect rt thisView.frame;rt.origin.x 0;[thisView setFrame:rt];}completion:^(BOOL finished){}];}else{CGRect rt thisView.frame;rt.origin.x 0;[thisView setFrame:rt];}}}}NSIndexPath *indexPath [NSIndexPath indexPathForRow:self-dataList.count-1 inSection:0];[self-textView scrollToItemAtIndexPath:indexPath atScrollPosition:UICollectionViewScrollPositionRight animated:YES];
};- (void)setReturnKeyType:(UIReturnKeyType)type
{SearchBarDisplayCenter *searchBar [[self viewWithTag:404] viewWithTag:405];searchBar.searchField.returnKeyType type;
}- (UIView *)parentView:(UIView *)selfView
{NSInteger index [contentView.subviews indexOfObject:selfView];if (index 0){return [contentView.subviews objectAtIndex:index-1];}return nil;
}- (UIView *)currentView
{return [contentView.subviews lastObject];
}- (void)registerSelectActionBlock:(BOOL (^)(NSInteger index))actionBlock
{[self setActionBlock:actionBlock];
}- (void)registerSearchKeywordBlock:(void (^)(NSString *keyword,BOOL willResign))aBlock
{[self setSearchBlock:aBlock];
}- (void)registerConfigurationSearchInterfaceBlock:(void (^)(UIView *pview))aBlock
{SearchBarDisplayCenter *searchBar [[self viewWithTag:404] viewWithTag:405];CGRect ft searchBar.frame;UIView *aview [[UIView alloc] initWithFrame:ft];[aview setUserInteractionEnabled:YES];[[self viewWithTag:404] addSubview:aview];aBlock(aview);
}- (CGSize)itemSizeWithIndex:(NSIndexPath *)indexPath{NSBreadData *data [dataList objectAtIndex:indexPath.row];CGFloat w data.itemWidth;return CGSizeMake(w5, textView.frame.size.height);
}- (void)setHiddenNavigatorBreadHidden:(BOOL)flag
{if (textView.isHidden ! flag){[textView setHidden:flag];if (flag){[UIView animateWithDuration:0.3 animations:^{CGRect rt self-textView.frame;rt.origin.y -rt.size.height;[self-textView setFrame:rt];CGFloat y 0;if ([self viewWithTag:404]){y [self viewWithTag:404].frame.origin.y[self viewWithTag:404].frame.size.height;}rt CGRectMake(0, y, self.bounds.size.width, 5);[self.sepView setFrame:rt];y 5;rt CGRectMake(0, y, self.bounds.size.width, self.bounds.size.height-y);[self-contentView setFrame:rt];}completion:^(BOOL finished){CGRect rt self-textView.frame;rt.origin.x self.bounds.size.width;rt.origin.y 0;[self-textView setFrame:rt];}];}else{[UIView animateWithDuration:0.3 animations:^{CGRect rt self-textView.frame;rt.origin.x 20;rt.origin.y CGRectFromString((NSString *)[self-textView dataObject]).origin.y;[self-textView setFrame:rt];CGFloat y rt.origin.yrt.size.height;rt CGRectMake(0, y, self.bounds.size.width, 5);[self.sepView setFrame:rt];y 5;rt CGRectMake(0, y, self.bounds.size.width, self.bounds.size.height-y);[self-contentView setFrame:rt];}completion:^(BOOL finished){}];}}for (UIView *aview in contentView.subviews){[aview setFrame:CGRectMake(0, 0, contentView.size.width, contentView.size.height)];}
}- (BOOL)canPopToOneView
{BOOL flag NO;if (dataList.count0) {return flag;}NSBreadData *mObject [dataList lastObject];if (mObject.sourceView dataList.count1){flag YES;[self poptoOneViewWithAnimation:dataList.count-2];}return flag;
}- (CGFloat)breadNavigatorHeight
{if (self.viewWorkType UIBreadViewSearchType){return MAX(textView.frame.size.height, [self viewWithTag:404].frame.size.height);}else if (self.viewWorkType UIBreadViewHyborType){return textView.frame.size.height[self viewWithTag:404].frame.size.height;}else{return textView.frame.size.height;}
}- (CGFloat)breadNavigatory
{return [self viewWithTag:404].frame.origin.y[self viewWithTag:404].frame.size.height;
}- (void)resignSearchFieldResponder
{SearchBarDisplayCenter *searchBar [[self viewWithTag:404] viewWithTag:405];[searchBar restoreInitialState];[searchBar.searchField resignFirstResponder];[self poptoOneViewWithAnimation:1];
}- (void)poptoOneViewWithAnimation:(NSInteger)row
{if (self.actionBlock){BOOL flag self.actionBlock(row);[self setHiddenNavigatorBreadHidden:flag];}NSBreadData *mObject [dataList objectAtIndex:row];if (mObject.sourceView){for (NSInteger ixdataList.count-1; ixrow;ix--){NSBreadData *mObject [dataList objectAtIndex:ix];UIView *aview mObject.sourceView;[UIView animateWithDuration:0.3 animations:^{CGRect rt aview.frame;rt.origin.x self.bounds.size.width;[aview setFrame:rt];}completion:^(BOOL finished){[aview removeFromSuperview];}];}[dataList removeObjectsInRange:NSMakeRange(row1, dataList.count- (row1))];NSBreadData *m [dataList lastObject];[m setIsSelected:NO];if (dataList.count 1){m [dataList objectAtIndex:dataList.count-2];[m setIsSelected:YES];}if (textView){[textView reloadSections:[NSIndexSet indexSetWithIndex:0]];}}}- (void)breadcrumbClearingData {if (self.actionBlock){BOOL flag self.actionBlock(0);[self setHiddenNavigatorBreadHidden:flag];}if (dataList.count 0) {
// for (NSInteger ix0; ixdataList.count;ix)
// {
// NSBreadData *mObject [dataList objectAtIndex:ix];
// UIView *aview mObject.sourceView;
// [aview removeFromSuperview];
// }[dataList removeAllObjects];}if (textView){[textView reloadSections:[NSIndexSet indexSetWithIndex:0]];}
}
#pragma mark - SearchBarDisplayCenterDelegate
- (void)getSearchKeyWordWhenChanged:(NSString *)searchWord
{if (self.searchBlock){self.searchBlock(searchWord,NO);}
}- (void)textFieldBecomeResponder:(NSString*)text
{if (self.searchBlock){self.searchBlock(text,NO);}
}- (void)textFieldResignResponder:(NSString*)text
{if (self.searchBlock){self.searchBlock(text,YES);}
}#pragma mark - UICollectionView
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
{return 1;
}- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{NSInteger count dataList.count;return count;
}- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section
{return 0;
}- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section
{return 0;
}- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{return [self itemSizeWithIndex:indexPath];
}// The cell that is returned must be retrieved from a call to -dequeueReusableCellWithReuseIdentifier:forIndexPath:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{UICollectionViewCell *cell [collectionView dequeueReusableCellWithReuseIdentifier:dequeueIdentifier forIndexPath:indexPath];[cell.contentView setBackgroundColor:[UIColor clearColor]];CGSize size [self itemSizeWithIndex:indexPath];NSBreadData *mObject [dataList objectAtIndex:indexPath.row];CGFloat x 5;if (indexPath.row0){CGRect rt CGRectMake(x, (size.height-10)/2, 10, 10);UIImageView *iconView [cell.contentView viewWithTag:90];if (!iconView){iconView [[UIImageView alloc] initWithFrame:rt];[iconView setImage:IMAGE_INIM_NAME(bookList_xiayiye)];[iconView setTag:90];[cell.contentView addSubview:iconView];}if (mObject.isSelected){[iconView setTintColor:RGB(0, 125, 255)];}x rt.size.width;}[[cell.contentView viewWithTag:90] setHidden:indexPath.row 0];CGRect rt CGRectMake(x, 0, size.width-x, size.height);UIButton *button [cell.contentView viewWithTag:91];if (!button){button [UIButton buttonWithType:UIButtonTypeCustom];[button setTag:91];[button.titleLabel setFont:[UIFont systemFontOfSize:14]];[button setTitleColor:RGB(40, 40, 40) forState:UIControlStateNormal];[button setTitleColor:RGB(0, 125, 255) forState:UIControlStateSelected];[cell.contentView addSubview:button];}[button setUserInteractionEnabled:NO];[button setFrame:rt];[button setTitle:mObject.title forState:UIControlStateNormal];[button setDataObject:mObject];[button setSelected:mObject.isSelected];[cell setBackgroundColor:[UIColor clearColor]];return cell;
}- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
// UICollectionViewCell *cell [contentView cellForItemAtIndexPath:indexPath];[self poptoOneViewWithAnimation:indexPath.row];
}
end完毕相关的资源文件自己寻找整理这里就不贴了相关的一些个人开发依赖有兴趣的同学可以留言找我要 三、使用 ZipRarViewController *c [[ZipRarViewController alloc] init];
//传入压缩包路径支持本地文件及远程文件URL
[c setFilePath:url];
//文中路径进行MD5目的是区分记录解压记录已解压过的后期不再解压而是直接读取展示
[c setFileFlag:[fileFlag md5Byte32Lower]];
[c setDelegateBlock:^(NSDictionary *data) {NSString *p [data stringForKey:path];NSString *f [data stringForKey:fileName];weakSelf.fileURL [NSURL fileURLWithPath:[p stringByAppendingPathComponent:f]];[weakSelf openDocument:weakSelf.fileURL];
}];
[self.navigationController pushViewController:c animated:YES];//打开文件方法
- (void)openDocument:(NSURL *)url {if ([QLPreviewController canPreviewItem:url]) {dispatch_async(dispatch_get_main_queue(), ^{[weakSelf initKkpreview];});}
}- (void)initKkpreview {self.kkpreview [[QLPreviewController alloc] init];self.kkpreview.delegate self;self.kkpreview.dataSource self;WeakSelf(self);UIView *rview [UINaviButton naviButtonWithActionBlock:^{[weakSelf.kkpreview.navigationController popViewControllerAnimated:YES];}];UIBarButtonItem *item [[UIBarButtonItem alloc]initWithCustomView:rview];self.kkpreview.navigationItem.leftBarButtonItem item;[self.navigationController pushViewController:self.kkpreview animated:YES];
}#pragma mark - QLPreviewControllerDataSource
- (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController *)controller{return 1;
}- (idQLPreviewItem)previewController:(QLPreviewController *)controller previewItemAtIndex:(NSInteger)index{return self.fileURL;
}