alt text http://28.media.tumblr.com/tumblr_ky3ezghsar1qzzxzzo1_400.jpg
有谁能告诉我如何实现这样的加载消息?它是UIActivityIndicatorView的一些变体吗? 谢谢 彼得
答案 0 :(得分:22)
在自定义子类UIView的initWithFrame中类似于以下内容:
_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];
答案 1 :(得分:1)
纺车绝对是UIActivityIndicatorView。 “Loading ...”文本是UILabel,矩形可以是图像,也可以是带圆角的UIView(通过CALayer)。有关其余信息的任何问题? Ť
答案 2 :(得分:1)
如果您正在寻找现有的解决方案,可以使用three20库 - 他们已在TTActivityLabel
课程中实现了此功能。
答案 3 :(得分:1)
看到这个----
- (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];
}
}
}
答案 4 :(得分:0)
我这样做的方式对我来说更加简单和顺利;
在“MainWindow.xib”中的Interface Builder中设计加载视图 这在应用程序的整个生命周期中都可用 (当然,如果你有一个,取决于选择的类型和结构) 如果你没有,只需在一些视图中设计它,你可以编程从主AppDelegate中获取一个指针(使用你的设计选择的味道,但使用MainWindow.xib是最简单的)
然后将此视图映射到YourApp类中的变量,该变量是您的臭名昭着的应用委托类。
Let the designed View map to an IBOutlet named "loading"
inside your app delegate class "YourApp"
by using the Interface Builder's wiring
然后,将以下函数放在某个类中并享受它们
这是为了在运行一些昂贵的东西之前显示加载视图;
+(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];
}
这样就可以从回调中删除它,或者当昂贵的操作完成时将其删除;
+(void)hideLoading {
[UIApplication sharedApplication].networkActivityIndicatorVisible = false;
YourApp* app = (YourApp*)[[UIApplication sharedApplication] delegate];
[app.loading removeFromSuperview];
}
P.S:是的,我使用NULL,true,false代替nil,YES,NO,原因显而易见......
希望它有所帮助, 享受...
答案 5 :(得分:0)
如果您想要一个不同的动画,我创建了一个自定义UIView(Loader Animation),您可以将其加载到UIActivity
的子类中。