1

説明の仕方がわからないけど…「ローディングサークル」って完璧と言ったら理解してくれたら、やりたいだけ

    // Start loading in the middle of the screen frozing all interaction
    for (int c = 0; c < ([barcos count] - 1); c++)
    {
        NSArray *datos = [[barcos objectAtIndex:c] componentsSeparatedByString:@";"];
        NSString *nombreImagen = [datos objectAtIndex:2];
        NSURL *accesoFtp = [NSURL URLWithString:[NSString stringWithFormat:@"%@/%@",urlFtp,nombreImagen]];
        NSData *imagen = [NSData dataWithContentsOfURL:accesoFtp];
        [imagen writeToFile:[[NSString alloc] initWithString: [docsDir stringByAppendingPathComponent:[NSString stringWithFormat:@"Barcos/%@",nombreImagen]]] atomically:NO];
    }
    // Stop frozing all interaction and remove the loading circle

おそらくスレッドか何かを追加する必要がありますが、私がやりたいことを正確に行う方法がわかりません。もう一度、あなたが私を助けてくれることを願っています。ありがとう。

編集:

UIActivityIndicatorView *activityIndicator;
activityIndicator = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
activityIndicator.frame = CGRectMake(0.0, 0.0, 40.0, 40.0);
activityIndicator.center = self.view.center;
[self.view addSubview: activityIndicator];

activityIndicator.startAnimating;

dispatch_queue_t queue = dispatch_get_global_queue(0,0);

dispatch_async(queue, ^{

        for (int c = 0; c < ([barcos count] - 1); c++)
        {
            NSArray *datos = [[barcos objectAtIndex:c] componentsSeparatedByString:@";"];
            NSString *nombreImagen = [datos objectAtIndex:2];
            NSURL *accesoFtp = [NSURL URLWithString:[NSString stringWithFormat:@"%@/%@",urlFtp,nombreImagen]];
            NSData *imagen = [NSData dataWithContentsOfURL:accesoFtp];
        [imagen writeToFile:[[NSString alloc] initWithString: [docsDir stringByAppendingPathComponent:[NSString stringWithFormat:@"Barcos/%@",nombreImagen]]] atomically:NO];
        }

    dispatch_sync(dispatch_get_main_queue(), ^{
        activityIndicator.stopAnimating;
    });
});

2つのこと

 1.- The activity indicator is too small but works, if I can to it bigger or same size but make darker the background would be better (Thanks!)
 2.- I have a warning with startAnimating and stopAnimating "Property access result unused - getters should not be used for side effects"

ありがとう=)

4

6 に答える 6

4

MBProgressHUDを使用して実行できます

このコードも確認してください。

//Show your activity indicator here

dispatch_queue_t queue = dispatch_get_global_queue(0,0);

dispatch_async(queue, ^{
    for (int c = 0; c < ([barcos count] - 1); c++)
    {
        NSArray *datos = [[barcos objectAtIndex:c] componentsSeparatedByString:@";"];
        NSString *nombreImagen = [datos objectAtIndex:2];
        NSURL *accesoFtp = [NSURL URLWithString:[NSString stringWithFormat:@"%@/%@",urlFtp,nombreImagen]];
        NSData *imagen = [NSData dataWithContentsOfURL:accesoFtp];
        [imagen writeToFile:[[NSString alloc] initWithString: [docsDir stringByAppendingPathComponent:[NSString stringWithFormat:@"Barcos/%@",nombreImagen]]] atomically:NO];
    }
    dispatch_sync(dispatch_get_main_queue(), ^{
              //hide that activity indicator here
            });

});

編集:

次のようなメソッドは絶対に呼び出さないでください。

activityIndicator.startAnimating;
activityIndicator.stopAnimating;

これらは、セッターとゲッターを呼び出すために使用されます。

次のように変更します。

[activityIndicator startAnimating];
[activityIndicator stopAnimating];
于 2013-01-23T10:23:11.050 に答える
3

UIActivityIndi​​catorViewを使用できます。

UIActivityIndicatorView *activityIndicator;

activityIndicator = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
activityIndicator.frame = CGRectMake(0.0, 0.0, 40.0, 40.0);
activityIndicator.center = self.view.center;
[self.view addSubview: activityIndicator];

また、Midhun MPで示されているように、たとえば、インジケーターが表示されている間にデータをロードするには、非同期を使用する必要がある場合があります。

于 2013-01-23T10:34:15.670 に答える
1

アクティビティインジケーターを試すことができるかもしれません。

于 2013-01-23T10:24:20.827 に答える
1

svprogresshudを使ってみることができます

于 2013-01-23T10:28:48.200 に答える
1

アクティビティインジケーターのスタイルを変更できます。

UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
    UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActionSheetStyleDefault];
    UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
    UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
    UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActionSheetStyleBlackOpaque];
    UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActionSheetStyleBlackTranslucent];

これらのスタイルのいずれかを使用してください。

そして、このリンクは、2番目の問題を解決するのに役立ちます xCode「プロパティアクセスの結果は未使用です-ゲッターは副作用に使用しないでください」

解決策:使用する代わりactivityIndicator.startAnimating;に、activityIndicator.stopAnimating[activityIndicator startAnimating];[activityIndicator stopAnimating];

于 2013-01-23T11:02:44.337 に答える
0

アクティビティインジケーターのサイズを変更するには:

activityIndicator.frame = CGRectMake(0.0, 0.0, 80.0, 80.0);
activityIndicator.transform = CGAffineTransformMakeScale(1.75, 1.75);

ちなみに、テーブルビューにデータを入力する場合は、アクティビティインジケーターを起動すると同時にユーザーインタラクションを有効にすることを検討してください。

[activityIndicator startAnimating];
tableView.userInteractionEnabled = NO;

そしてそれを後で復元します:

[self.tableView reloadData];
[activityIndicator stopAnimating];
tableView.userInteractionEnabled = YES;
于 2015-07-25T19:29:43.987 に答える