(source: tumblr.com)
Can anyone tell me how to achieve such loading message? is it some variation of UIActivityIndicatorView? thanks peter
Something similar to the following in your initWithFrame of your custom subclassed UIView:
_hudView = [[UIView alloc] initWithFrame:CGRectMake(75, 155, 170, 170)];
_hudView.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.5];
_hudView.clipsToBounds = YES;
_hudView.layer.cornerRadius = 10.0;
_activityIndicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
_activityIndicatorView.frame = CGRectMake(65, 40, _activityIndicatorView.bounds.size.width, _activityIndicatorView.bounds.size.height);
[_hudView addSubview:_activityIndicatorView];
[_activityIndicatorView startAnimating];
_captionLabel = [[UILabel alloc] initWithFrame:CGRectMake(20, 115, 130, 22)];
_captionLabel.backgroundColor = [UIColor clearColor];
_captionLabel.textColor = [UIColor whiteColor];
_captionLabel.adjustsFontSizeToFitWidth = YES;
_captionLabel.textAlignment = NSTextAlignmentCenter;
_captionLabel.text = @"Loading...";
[_hudView addSubview:_captionLabel];
[self addSubview:_hudView];
see this----
- (void)viewDidLoad {
[super viewDidLoad];
// [self ShowMsg];
//-----------------checking version of IOS -----------------------------------
CGFloat ver = [[[UIDevice currentDevice]systemVersion]floatValue];
NSString *str = [NSString stringWithFormat:@"%f",ver];
NSLog(@"%@",str);
NSArray *arr = [str componentsSeparatedByString:@"."];
strVerChk = [arr objectAtIndex:0];
NSLog(@"%@",strVerChk);
[strVerChk retain];
NSInteger verChk = [[NSString stringWithFormat:@"%@",strVerChk]intValue];
NSLog(@"integer %d",verChk);
if (verChk < 5) {
imag = [UIImage imageNamed:@"WaitScreen.png"];
}
else
{
imag = [UIImage imageNamed:@"WaitScreen_5.png"];
}
Lblmsg = [[UILabel alloc]init];
//WithFrame:CGRectMake(10, 10, 100, 30)];
Lblmsg.backgroundColor = [UIColor clearColor];
Lblmsg.textColor = [UIColor whiteColor];
Lblmsg.text = @" Please Wait....";
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{
[Lblmsg setFont:[UIFont fontWithName:@"Arial" size:16]];
}else
{
[Lblmsg setFont:[UIFont fontWithName:@"Arial" size:12]];
}
Lblmsg.textAlignment = UITextAlignmentCenter;
activityInd = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
// [activityInd startAnimating];
imageview = [[UIImageView alloc]initWithImage:imag];
[imageview addSubview:Lblmsg];
[imageview addSubview:activityInd];
[self.view addSubview:imageview];
self.view.backgroundColor = [UIColor clearColor];
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
{
// self.interfaceOrientation = [UIApplication sharedApplication].statusBarOrientation
UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
if(orientation == UIInterfaceOrientationPortrait ||orientation == UIInterfaceOrientationPortraitUpsideDown)
{
self.view.frame = CGRectMake(0, 0, 320, 480);
imageview.frame = CGRectMake(100, 130, 120, 80);
}
else{
self.view.frame = CGRectMake(0, 0, 480, 320);
imageview.frame = CGRectMake(180, 70, 120, 80);
}
Lblmsg.frame = CGRectMake(0, 45, 120, 40);
NSInteger verChk = [[NSString stringWithFormat:@"%@",strVerChk]intValue];
NSLog(@"integer %d",verChk);
if (verChk < 5) {
activityInd.frame = CGRectMake(41, 9, 28, 28);
}
else
{
activityInd.frame = CGRectMake(41, 9, 28, 28);
}
[activityInd startAnimating];
}
else{
UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
if(orientation == UIInterfaceOrientationPortrait ||orientation == UIInterfaceOrientationPortraitUpsideDown)
{
self.view.frame = CGRectMake(0, 0, 768, 1024);
imageview.frame = CGRectMake(274, 330, 210, 160);
Lblmsg.frame = CGRectMake(10, 115, 190, 30);
NSInteger verChk = [[NSString stringWithFormat:@"%@",strVerChk]intValue];
NSLog(@"integer %d",verChk);
if (verChk < 5) {
activityInd.frame = CGRectMake(71, 20, 52, 52);
}
else
{
activityInd.frame = CGRectMake(71, 20, 49, 49);
}
[activityInd startAnimating];
}
else{
self.view.frame = CGRectMake(0, 0, 1024, 768);
imageview.frame = CGRectMake(390, 264, 200, 150);
Lblmsg.frame = CGRectMake(10, 115, 180, 30);
NSInteger verChk = [[NSString stringWithFormat:@"%@",strVerChk]intValue];
NSLog(@"integer %d",verChk);
if (verChk < 5) {
activityInd.frame = CGRectMake(68, 17, 52, 52);
}
else
{
activityInd.frame = CGRectMake(68, 17, 49, 49);
}
[activityInd startAnimating];
}
}
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(didRotate)
name:@"UIDeviceOrientationDidChangeNotification" object:nil];
}
-(void)didRotate{
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
{
// self.interfaceOrientation = [UIApplication sharedApplication].statusBarOrientation
UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
if(orientation == UIInterfaceOrientationPortrait ||orientation == UIInterfaceOrientationPortraitUpsideDown)
{
self.view.frame = CGRectMake(0, 0, 320, 480);
imageview.frame = CGRectMake(100, 130, 120, 80);
//Lblmsg.frame = CGRectMake(0, 40, 120, 30);
//activityInd.frame = CGRectMake(20, 10, 80, 30);
}
else{
self.view.frame = CGRectMake(0, 0, 480, 320);
imageview.frame = CGRectMake(180, 70, 120, 80);
//activityInd.frame = CGRectMake(20, 10, 80, 30);
//activityInd.frame = CGRectMake(50, 15, 10, 10);
//[activityInd startAnimating];
}
Lblmsg.frame = CGRectMake(0, 45, 120, 40);
NSInteger verChk = [[NSString stringWithFormat:@"%@",strVerChk]intValue];
NSLog(@"integer %d",verChk);
if (verChk < 5) {
activityInd.frame = CGRectMake(41, 9, 28, 28);
}
else
{
activityInd.frame = CGRectMake(41, 9, 28, 28);
}
[activityInd startAnimating];
}
else{
UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
if(orientation == UIInterfaceOrientationPortrait ||orientation == UIInterfaceOrientationPortraitUpsideDown)
{
self.view.frame = CGRectMake(0, 0, 768, 1024);
imageview.frame = CGRectMake(274, 330, 210, 160);
Lblmsg.frame = CGRectMake(10, 115, 190, 30);
NSInteger verChk = [[NSString stringWithFormat:@"%@",strVerChk]intValue];
NSLog(@"integer %d",verChk);
if (verChk < 5) {
activityInd.frame = CGRectMake(71, 20, 52, 52);
}
else
{
activityInd.frame = CGRectMake(71, 20, 49, 49);
}
[activityInd startAnimating];
}
else{
self.view.frame = CGRectMake(0, 0, 1024, 768);
imageview.frame = CGRectMake(390, 264, 200, 150);
Lblmsg.frame = CGRectMake(10, 115, 180, 30);
NSInteger verChk = [[NSString stringWithFormat:@"%@",strVerChk]intValue];
NSLog(@"integer %d",verChk);
if (verChk < 5) {
activityInd.frame = CGRectMake(68, 17, 52, 52);
}
else
{
activityInd.frame = CGRectMake(68, 17, 49, 49);
}
[activityInd startAnimating];
}
}
}
The spinning wheel is definitely a UIActivityIndicatorView. The "Loading..." text is a UILabel, the rectangle could be an image or could be a UIView with rounded corners (via CALayer). Any questions about the rest of the message? T
If you wanted a different animation, I created a custom UIView (Loader Animation) to which you could load into a subclass of UIActivity
.
My way of doing this works much simpler and smooth for me;
Design your loading view in Interface Builder inside your "MainWindow.xib" which is available all through the lifetime of the app (of course if you have one, depending on the type and structure of choice) If you dont have one, just design it inside some view where you can programmatically grab a pointer from your main AppDelegate (use your taste of design choice, but using MainWindow.xib is the easiest)
Then map this view to a variable in your YourApp class which is the infamous app delegate class of yours.
Let the designed View map to an IBOutlet named "loading"
inside your app delegate class "YourApp"
by using the Interface Builder's wiring
Then, put the following functions in some class and enjoy them
This for showing the loading view just before you run some expensive stuff;
+(void)showLoading {
YourApp* app = (YourApp*)[[UIApplication sharedApplication] delegate];
[UIApplication sharedApplication].networkActivityIndicatorVisible = true;
[app.loading removeFromSuperview];
[app.window addSubview:app.loading];
app.loading.alpha = 0.0;
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.50];
app.loading.alpha = 0.8;
[UIView commitAnimations];
}
and this to remove it from the callback or whatever it goes when the expensive action is completed;
+(void)hideLoading {
[UIApplication sharedApplication].networkActivityIndicatorVisible = false;
YourApp* app = (YourApp*)[[UIApplication sharedApplication] delegate];
[app.loading removeFromSuperview];
}
P.S: And yes I use NULL, true, false instead of nil, YES, NO for obvious reasons...
Hope it helps, Enjoy...
If you're looking for existing solutions you may use three20 library - they have implemented this functionality in TTActivityLabel
class.