1、新建视图控制器ViewController.m(不带xib),作为根视图控制器,通过ViewController的-(void)loadView方法构建UI,ViewController.h如下:
#importViewController.m如下:@interface ViewController : UIViewController{ CGFloat progressValue; //进度条的值 } @property(strong,nonatomic)UIProgressView *progress; @property(strong,nonatomic)UILabel *showValue; @property(strong,nonatomic)UIButton *startThread; @end
#import "ViewController.h" @implementation ViewController @synthesize progress; @synthesize showValue; @synthesize startThread; -(void)loadView{ CGRect appFrame = [UIScreen mainScreen].applicationFrame; UIView *view = [[UIView alloc]initWithFrame:appFrame]; self.view = view; //设置背景颜色 UIColor *bgcolor = [UIColor grayColor]; [self.view setBackgroundColor:bgcolor]; [self initViews]; } //初始化视图组件 -(void)initViews{ //初始化progress CGRect frame = CGRectMake(50, 50, 200, 30); progress = [[UIProgressView alloc]initWithFrame:frame]; [self.view addSubview:progress]; //初始化showValue showValue = [[UILabel alloc]init]; frame = showValue.frame; frame.origin.x = CGRectGetMaxX(progress.frame)+10; frame.origin.y = CGRectGetMinY(progress.frame); frame.size.width = 35; frame.size.height = 15; showValue.frame = frame; showValue.backgroundColor = [UIColor redColor]; showValue.text = @"0.0"; [self.view addSubview:showValue]; //初始化startThread startThread = [[UIButton alloc]init]; frame = startThread.frame; frame.origin.x = 110; frame.origin.y = 80; frame.size.width = 100; frame.size.height = 50; startThread.frame = frame; UIImage *img = [UIImage imageNamed:@"btn.png"]; [startThread setBackgroundImage:img forState:UIControlStateNormal]; [startThread setTitleColor:[UIColor colorWithRed:1.0 green:0 blue:0 alpha:1.0] forState:UIControlStateNormal]; [startThread setTitle:@"开启子线程" forState:UIControlStateNormal]; //设置事件 [startThread addTarget:self action:@selector(startThreadButtonPressed) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:startThread]; } //开启子线程 -(void)startThreadButtonPressed{ progress.progress = 0.0; showValue.text = @"0.0"; startThread.hidden = YES; //该语句会让主线程堵塞2秒,这就是为什么要将耗时操作放在子线程的原因之一 //[NSThread sleepForTimeInterval:2]; //开启一个新线程 [NSThread detachNewThreadSelector:@selector(doJobInBackground) toTarget:self withObject:nil]; } //子线程,后台执行工作 -(void)doJobInBackground{ //睡眠,模拟子线程中耗时操作 [NSThread sleepForTimeInterval:2]; //通知主线程执行更新操作 [self performSelectorOnMainThread:@selector(invalidateProgress) withObject:nil waitUntilDone:NO]; } //更新进度 -(void)invalidateProgress{ progressValue = [progress progress]; showValue.text = [NSString stringWithFormat:@"%.2f",progressValue]; if(progressValue < 1.0){ progress.progress = progressValue+0.02; //启动定时器 [NSTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(invalidateProgress) userInfo:nil repeats:NO]; }else{ progress.progress = 1.0; showValue.text = @"1.0"; startThread.hidden = NO; } } - (void)viewDidUnload { [super viewDidUnload]; // Release any retained subviews of the main view. progress = nil; showValue = nil; startThread = nil; } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); } @end2、运行效果如下:
收藏的用户(0) X
正在加载信息~
推荐阅读
最新回复 (0)
站点信息
- 文章2300
- 用户1336
- 访客10861715
每日一句
True success inspires others to act.
真正的成功是激励他人行动。
真正的成功是激励他人行动。
语法错误: 意外的令牌“标识符”
全面理解Gradle - 定义Task
Motrix全能下载工具 (支持 BT / 磁力链 / 百度网盘)
谷歌Pixel正在开始起飞?
获取ElementUI Table排序后的数据
Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is
亲测!虚拟机VirtualBox安装MAC OS 10.12图文教程
华为手机app闪退重启界面清空log日志问题
android ndk开发之asm/page.h: not found
手机屏幕碎了怎么备份操作?
免ROOT实现模拟点击任意位置
新手必看修改DSDT教程
thinkpad t470p装黑苹果系统10.13.2
新会员