IOS状态栏是什么地方? 它是IOS设备屏幕顶部显示信号以及电池的区域。状态栏默认的高度是20像素,状态栏在软件开发中有何作用?联网应用中可在自动帮用户下载数据时使用,推荐在状态栏中予以显示。状态栏可以通过程序来控制隐藏与显示,也可以在状态栏之上添加Loading的动画,让用户感觉目前正处于下载状态中。下面我们先学习最简单的一种,就是在状态栏之上添加下载的Loading动画。如下图所示,在屏幕顶部状态栏中,信号图标旁边已经出现动画Loading的标志,它目前正在一直转圈。另外,本篇文章适用于普通IOS软件开发与Three20软件开发。
动画显示与隐藏的代码很简单,如下所示:
2
|
[[UIApplication
sharedApplication] setNetworkActivityIndicatorVisible:YES];
|
4
|
[[UIApplication
sharedApplication] setNetworkActivityIndicatorVisible:NO];
|
这样的动画确实有点局限,不能修改动画的位置,我们可以将整个状态栏利用起来。写一个新视图覆盖至原有状态栏视图之上,在新视图中写入需要的东西。在学习它之前我们先学习如何隐藏与显示状态栏。
状态栏显示与隐藏的代码很简单,如下所示:
2
|
[[UIApplication
sharedApplication] setStatusBarHidden:YES withAnimation:YES];
|
5
|
[[UIApplication
sharedApplication] setStatusBarHidden:NO withAnimation:YES];
|
setStatusBarHidden :表示状态栏显示与隐藏。
withAnimation:表示是否播放显示与隐藏的过渡动画。
别高兴的太早,它仅仅只是隐藏状态栏,所以屏幕顶部还是会空留20像素的白条,为了让显示上更佳彻底,需要继续重新设定整个窗口的显示区域以及标题栏的位置:
2
|
[[UIApplication
sharedApplication] setStatusBarHidden:YES withAnimation:YES];
|
4
|
[[UIApplication
sharedApplication].keyWindow setFrame:CGRectMake(0, 0, 320, 480)];
|
6
|
[self.navigationController.navigationBar
setFrame:CGRectMake(0, 0, 320, 44)];
|
如下图所示,状态条已经完全去掉,包括顶部的白条,是不是很神奇呢?
下面学习本文的重点内容,重写状态栏内容。如下图所示,状态栏顶部已经写入读取进度的百分比,为了让效果更佳好,在状态栏顶部将绘制进度条以及下载进度的百分比。在状态栏左侧将绘制读取动画,一个圆圈不停的转啊转啊的。嘎嘎~
下面开始详细的代码介绍。
ViewController.h
01
|
#import
<Three20/Three20.h>
|
03
|
@interface
ViewController : TTViewController
|
08
|
UIActivityIndicatorView
*activity;
|
ViewController.m
001
|
#import
"ViewController.h"
|
003
|
@implementation
ViewController
|
010
|
self.title
=@ "雨松MOMO软件开发" ;
|
012
|
[self.view
setBackgroundColor:[UIColor blackColor]];
|
015
|
TTImageView
*imageview = [[[TTImageView alloc] initWithFrame:
|
016
|
CGRectMake(100,
50, 120, 120)] autorelease];
|
021
|
[self.view
addSubview:imageview];
|
024
|
NSArray
*titles = [[NSArray alloc] initWithObjects:
|
030
|
for ( int i
=0; i < [titles count]; i++)
|
034
|
UIButton
*button = [UIButton buttonWithType:1];
|
036
|
button.frame
= CGRectMake(0, 200 + i * 40, 320, 30);
|
038
|
[button
setTitle:[titles objectAtIndex:i] forState:UIControlStateNormal];
|
042
|
[button
addTarget:self action:@selector(ButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
|
044
|
[self.view
addSubview: button];
|
048
|
app
= [UIApplication sharedApplication];
|
052
|
-( void )ButtonPressed:(id)buttonID
|
055
|
UIButton
*button = (UIButton *)buttonID;
|
060
|
[app
setStatusBarHidden:YES withAnimation:YES];
|
061
|
[app.keyWindow
setWindowLevel:UIWindowLevelStatusBar];
|
062
|
[app.keyWindow
setFrame:CGRectMake(0, 0, 320, 480)];
|
066
|
[app
setStatusBarHidden:NO withAnimation:YES];
|
067
|
[app.keyWindow
setWindowLevel:UIWindowLevelStatusBar];
|
068
|
[app.keyWindow
setFrame:CGRectMake(0, 20, 320, 460)];
|
072
|
[app
setStatusBarHidden:NO withAnimation:YES];
|
073
|
[app.keyWindow
setWindowLevel:UIWindowLevelStatusBar];
|
074
|
[app.keyWindow
setFrame:CGRectMake(0, 20, 320, 460)];
|
075
|
[self
performSelector:@selector(startUpdate) withObject:nil afterDelay:0.4];
|
081
|
[self.navigationController.navigationBar
setFrame:CGRectMake(0, 0, 320, 44)];
|
088
|
TT_RELEASE_SAFELY(textView);
|
089
|
TT_RELEASE_SAFELY(activity);
|
090
|
TT_RELEASE_SAFELY(timer);
|
091
|
TT_RELEASE_SAFELY(app);
|
100
|
textView
= [[UITextView alloc] initWithFrame:CGRectMake(0, -25, 320, 25)];
|
101
|
[textView
setBackgroundColor:[UIColor blackColor]];
|
102
|
[textView
setText:@ "开始更新" ];
|
103
|
[textView
setTextColor:[UIColor whiteColor]];
|
104
|
[textView
setTextAlignment:UITextAlignmentCenter];
|
105
|
[textView
setFont:[UIFont systemFontOfSize:15]];
|
106
|
[app.keyWindow
addSubview:textView];
|
109
|
[UIView
beginAnimations:@ "anim1" context:nil];
|
110
|
[UIView
setAnimationDuration:1.0];
|
111
|
textView.alpha
= 0.0f;
|
112
|
textView.alpha
= 1.0f;
|
113
|
[UIView
commitAnimations];
|
118
|
timer
= [NSTimer scheduledTimerWithTimeInterval: 0.1
|
120
|
selector:
@selector(handleTimer:)
|
128
|
-
( void )
handleTimer: (NSTimer *) t
|
136
|
NSString
*text = [NSString stringWithFormat:@ "读取进度百分之:%d
" ,timeCount];
|
137
|
[textView
setText:text];
|
142
|
[textView
setText:@ "读取完毕" ];
|
147
|
[self
removeLoading];
|
150
|
[UIView
beginAnimations:@ "anim" context:nil];
|
151
|
[UIView
setAnimationDuration:1.0];
|
152
|
textView.alpha=
1.0f;
|
153
|
textView.alpha
= 0.0f;
|
154
|
[UIView
commitAnimations];
|
161
|
activity
= [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
|
163
|
activity.activityIndicatorViewStyle=UIActivityIndicatorViewStyleWhite;
|
165
|
activity.frame
= CGRectMake(0, -18, 20, 18);
|
167
|
[app.keyWindow
addSubview:activity];
|
169
|
[activity
startAnimating];
|
178
|
[activity
stopAnimating];
|
180
|
[activity
removeFromSuperview];
|
186
|
TT_INVALIDATE_TIMER(timer);
|
注解1:setStatusBarHidden:YES设定状态栏的隐藏,隐藏状态栏后,为了让下方原有的视图自动向上移动,那么就需要重新设定窗口的等级与显示区域。使用setWindowLevel方法可设定窗口的等级,窗口等级可分为三种:普通窗口,警告窗口,状态栏窗口,所以这里我们设定窗口等级为UIWindowLevelStatusBar(状态栏窗口)。窗口等级设定完毕后紧接着需要重新设定窗口的显示区域,重新设定窗口的显示区域为CGRect(0,0,320,480),表示新的窗口将完整填充整个手机屏幕。
注解2:状态栏的显示与状态栏的隐藏是一个道理,setStatusBarHidden:NO 设置状态栏可见,继续设定窗口的等级与显示区域。因为状态栏的高度为20,所以现在设定窗口的显示区域为CGRect(0,20,320,460),可保持视不包含状态栏的20像素高度,视图将填充下方整个屏幕。
注解3:在这里我们需要将新的视图覆盖至状态栏之上,首先是隐藏状态栏,隐藏时由于开启了隐藏状态栏的动画,所以延迟0.4毫秒等状态按彻底隐藏后在将新的视图覆盖至状态栏之上。使用performSelector方法,参数1表示延迟一段时间后执行的方法,参数2表示附带一个对象,参数3表示延迟的时间。这里是延迟0.4毫秒后执行startUpdate方法,下载属于以及更新视图都写在该方法中。
注解4:重新设定标题栏的位置,这个一定要设定,否则由于修改窗口的显示区域后标题栏显示上会出现偏差。
注解5:实现视图切换淡入淡出的效果,beginAnimations方法表示即将开始播放一段动画,setAnimationDuration方法表示设定动画播放的长度,textView.alpha表示设定视图的透明度,这里设定了2个透明度,0.0表示完全透明,1.0表示完全不透明,当然还可继续设定更多的视图变化,这段动画的含义是在1秒内现实视图从完全透明到完全不透明。最后执行[UIView commitAnimations]方法才是真正的开始播放动画,请大家记住beginAnimations 与commitAnimations两个方法必需成对儿出现,视图的任何变化都需要写在两个方法之间。
注解6:NSTimer表示时间计数器,它的原理就是在程序中新开一个子线程,并且子线程将每隔一段时间执行一次。本节我们使用它模拟用户下载数据的时间。这段代码表示程序将每隔0.1秒执行一次handleTimer方法,在handleTimer方法中去更新状态栏视图显示的文字,下载百分比。数据下载完毕后关闭视图,播放淡入淡出动画并且恢复原有状态栏。
最后在说说Three20中3个比较常用释放对象的宏定义:
1
|
#define
TT_RELEASE_SAFELY(__POINTER) { [__POINTER release]; __POINTER = nil; }
|
2
|
#define
TT_INVALIDATE_TIMER(__TIMER) { [__TIMER invalidate]; __TIMER = nil; }
|
5
|
#define
TT_RELEASE_CF_SAFELY(__REF) { if (nil != (__REF)) { CFRelease(__REF); __REF = nil; } }
|
TT_RELEASE_SAFELY() :表示释放对象,并且将该对象赋值为nil。
TT_INVALIDATE_TIMER():停止时间计数器,并且将该计数器赋值为nil。
TT_RELEASE_CF_SAFELY:检测对象是否为nil,如果不为nil释放对象,最后赋值为nil。
最后欢迎各位盆友可以和MOMO一起讨论Three20软件开发,如果你觉得看得不清楚,MOMO附带上本章的源码下载,希望大家可以一起学习 哈哈~。哇咔咔~ MOMO愿和 大家好好学习,大家一起进步哈~!!!
(下载后必需搭建three20环境成功后才能运行~ 因为three20为引用加载,所以程序路径都是我本机的请见谅!或者你可可以将你的Three20路径修改的和我一样就可以直接运行啦,我的路径是:User (用户) -> Share(共享)->Three20)。
分享到:
相关推荐
雨松MOMO程序开发系列博文 Three20软件引擎之自制IOS顶部状态栏详解(六) 欢迎大家下载阅读,哇咔咔。
FingerGestures研究院之...Three20研究院之构建开发环境与HelloWorld(一) Unity3D研究院之在开始学习拓展编辑器(一) Unity3D研究院之构建游戏框架与导出IOS项目(一) Unity3D视频开发教程之开始学习Unity(一)
雨松MOMO Three20软件开发系列博文 Three20软件引擎之结合第三方FMDB框架操作数据库详解 欢迎大家下载阅读,哇咔咔、
IOS应用源码——Three20 Photo Viewer for iOS.rar
IOS应用源码——Three20 TTLauncher for iOS.rar
雨松MOMO程序开发系列博文: Three20软件引擎之自定义TableView列表详解(二),欢迎大家下载阅读,哇咔咔!
简洁的 iOS 悬浮消息栏.zip,Whisper is a component that will make the task of display messages and in-app notifications simple. It has three different views inside
iOS游戏应用源代码——facebook-three20-1.0.11-0-g089a89c.zip
threejs 着色器之书threejs 着色器之书threejs 着色器之书threejs 着色器之书threejs 着色器之书threejs 着色器之书threejs 着色器之书threejs 着色器之书threejs 着色器之书threejs 着色器之书threejs 着色器之书...
01 Three.js简介 02 初始化Three.js项目 03 编写HelloThreejs 04 添加一些自适应 05 Three.js基础之图元 06 图元练习示例 07 图元之3D文字 08 Three.js基础之场景 09 Three.js基础之材质 10 Three.js基础之纹理 11 ...
使用threejs开发,手机端VR全景图,IOS13版本点击按钮“启动IOS全景“同样可以使用,但是有点需说明,必须使用https协议才能使用手机端陀螺仪,老版本安卓不需要HTTPS,但是新版本安卓都升级了浏览器,都必须使用...
Vue使用Three.js加载glTF模型的方法详解
Three20 is a open source Objective-C library used by dozens of well-known brands in the App Store, including Facebook, Posterous, Pulse, Meetup.com, and SCVNGR. Three20 provides powerful view ...
threeJs播放全景视频Demo
雨松MOMO 程序开发 Three20软件引擎之构建开发环境与HelloWorld 欢迎大家下载阅读,哇咔咔~
As an aspiring iOS developer, you face three major tasks: • You must learn the Swift language. Swift is the recommended development language for iOS. The first two chapters of this book are designed ...
ios经典框架的android版本 希望大家能够用的上
Become well-versed with forensics for the Android, iOS, and Windows 10 mobile platforms by learning essential techniques and exploring real-life scenarios Key Features Apply advanced forensic ...
Three20使用图文教程,three20是一个强大的UI库,谁用谁知道!
Start Developing iOS Apps Today provides the perfect starting point for iOS development. On your Mac, you can create iOS apps that run on iPad, iPhone, and iPod touch. View this guide’s four short ...