9

代替テキスト
(ソース: tumblr.com )

そのような読み込みメッセージを達成する方法を誰か教えてもらえますか? UIActivityIndi​​catorView のバリエーションですか? ありがとうピーター

4

6 に答える 6

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];
于 2010-02-20T01:38:35.863 に答える
1

糸車は間違いなく UIActivityIndi​​catorView です。「読み込み中...」テキストは UILabel であり、四角形はイメージであるか、角が丸い UIView である可能性があります (CALayer 経由)。メッセージの残りの部分について何か質問はありますか? T

于 2010-02-19T14:40:41.577 に答える
1

既存のソリューションを探している場合は、three20ライブラリを使用できます。この機能はTTActivityLabelクラスに実装されています。

于 2010-02-19T14:46:01.497 に答える
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];


        }


    }


}
于 2011-12-12T04:33:55.233 に答える
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];
}

PS: はい、明らかな理由から、nil、YES、NO の代わりに NULL、true、false を使用しています...

それが役立つことを願って、楽しんでください...

于 2011-02-18T10:26:19.270 に答える
0

別のアニメーションが必要な場合は、のサブクラスにロードできるカスタム UIView (ローダー アニメーションUIActivity) を作成しました。

于 2013-04-22T20:51:34.060 に答える