UIActivityIndi​​catorView或类似的

时间:2010-02-19 14:38:31

标签: iphone uiactivityindicatorview

alt text http://28.media.tumblr.com/tumblr_ky3ezghsar1qzzxzzo1_400.jpg

有谁能告诉我如何实现这样的加载消息?它是UIActivityIndi​​catorView的一些变体吗? 谢谢 彼得

6 个答案:

答案 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)

纺车绝对是UIActivityIndi​​catorView。 “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的子类中。