需求是在后台下载文件,同时在UI Thread展示进度条。问题是一般的UIProgressView是非模态的,在网上搜索了一番,没找到在ios中实现模态窗口的现成方法。但是UIAlertView就是模态的,就想能不能利用UIAlertView来实现这个需求
但是从ios6开始,UIAlertView的addSubview方法已经被deprecated了,所以网上很多例子都不行。最后在GitHub上找到了一个组件CustomIOS7AlertView,可以实现此需求,在此基础上包装了一下,代码如下:
-(id) initWithLabelText:(NSString*)labelText { self = [super init]; if(self){ CGRect screen = [[UIScreen mainScreen] bounds];// 设备屏幕尺寸 CGFloat screenHeight = screen.size.height;// 屏幕高度,ipad retina上是1024个点 CGFloat progressWidth = screenHeight * 0.7;// 1024 * 0.7 // 宽度为进度条宽度+40(左右各留20间距),高度为100,容纳一个label和一个进度条 UIView *innerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, progressWidth+40, 100)]; // label设为400宽,40高,左边距是算出来的 UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake((progressWidth-360)/2, 10, 400, 40)]; label.text = labelText; label.textAlignment = NSTextAlignmentCenter; // progress的起始位置,跟label有关 self.progress = [[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleBar]; self.progress.frame = CGRectMake(20, 60, progressWidth, 30); [innerView addSubview:label]; [innerView addSubview:self.progress]; [self setContainerView:innerView]; [self setButtonTitles:nil]; } return self; }
viewController.progressAlertView = [[YLSModalProgressView alloc] initWithLabelText:@"some message here..."]; [viewController.progressAlertView show];