ios中的模态进度条

需求是在后台下载文件,同时在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;
}

以上代码创建并初始化CustomIOS7AlertView的实例,其中除了progress以外,还嵌入了一个label,可以展示一些文字。下面的代码展示此AlertView

viewController.progressAlertView = [[YLSModalProgressView alloc] initWithLabelText:@"some message here..."];
[viewController.progressAlertView show];

该组件的GitHub主页在: CustomIOS7AlertView

你可能感兴趣的:(ios中的模态进度条)