UIActivityIndicatorView или аналогичный - PullRequest
9 голосов
/ 19 февраля 2010

alt text
(источник: tumblr.com )

Может кто-нибудь сказать мне, как добиться такой загрузки сообщения? это какой-то вариант UIActivityIndicatorView? Спасибо питер

Ответы [ 6 ]

22 голосов
/ 20 февраля 2010

Что-то похожее на следующее в вашем initWithFrame вашего пользовательского подкласса 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];
1 голос
/ 12 декабря 2011

см. Это ----

- (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];


        }


    }


}
1 голос
/ 19 февраля 2010

Если вы ищете существующие решения, вы можете использовать библиотеку three20 - они реализовали эту функцию в классе TTActivityLabel.

1 голос
/ 19 февраля 2010

Вращающееся колесо - это, безусловно, UIActivityIndicatorView. Текст «Загрузка ...» - это UILabel, прямоугольник может быть изображением или UIView со скругленными углами (через CALayer). Есть вопросы по поводу остальной части сообщения? T

0 голосов
/ 23 апреля 2013

Если вам нужна другая анимация, я создал пользовательский UIView ( Loader Animation ), в который вы можете загрузить подкласс UIActivity.

0 голосов
/ 18 февраля 2011

Мой способ сделать это работает намного проще и плавнее для меня;

Создайте свой загрузочный вид в Интерфейсном Разработчике внутри вашего "MainWindow.xib", который доступен на протяжении всего жизненного цикла приложения (конечно, еслиу вас есть один, в зависимости от типа и структуры выбора) Если у вас его нет, просто спроектируйте его внутри некоторого представления, где вы можете программно получить указатель из вашего основного 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

Затем поместите следующие функции в некоторый класс и наслаждайтесьthem

Это для отображения представления загрузки непосредственно перед запуском какого-либо дорогостоящего материала;

+(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];
}

PS: И да, я использую NULL, true, false вместо nil, YES, NO по очевидным причинам ...

Надеюсь, это поможет, наслаждайтесь ...

...