13

私は AFNetworking ライブラリを使用して、URL の内容で画像を設定しています。次の例では、topLeftImage は UIImageView のインスタンスです。

[topLeftImage setImageWithURL:[NSURL URLWithString:imageURL]];

やりたいことは、画像のダウンロード中に UIActivityIndi​​catorView を表示することです。ただし、アクティビティ インジケーターの開始と停止をトリガーする場所がわかりません。以下は、アクティビティ インジケーターのコードです。

UIActivityIndicatorView *activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
[topLeftImage addSubview:activityIndicator];
[activityIndicator startAnimating];

上記のコードを setImageWithURL メソッドにリンクして、アクティビティ インジケータが画像のダウンロード中にのみ表示されるようにするにはどうすればよいですか?

4

2 に答える 2

38

UIImageView+AFNetworking.h カテゴリは、成功ブロックと失敗ブロックを使用できる setImageWithURL メソッドを提供します。このブロックは、リクエストが成功または失敗すると実行されます。したがって、リクエストの直前にアニメーションを開始し、成功ブロックと失敗ブロックに停止を置くことができます。これはサンプルコードです:

NSURL *imageURL = [NSURL URLWithString:@"http://upload.wikimedia.org/wikipedia/commons/thumb/e/ec/Mona_Lisa%2C_by_Leonardo_da_Vinci%2C_from_C2RMF_retouched.jpg/402px-Mona_Lisa%2C_by_Leonardo_da_Vinci%2C_from_C2RMF_retouched.jpg"];
NSURLRequest *imageRequest = [NSURLRequest requestWithURL:imageURL];
[_activityIndicator setHidden:NO];
[_activityIndicator startAnimating];
[_imageView setImageWithURLRequest:imageRequest
                  placeholderImage:nil
                           success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image)
 {
     [_activityIndicator setHidden:YES];
     [_activityIndicator stopAnimating];
     _imageView.image = image;
 }
                           failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error)
 {
     [_activityIndicator setHidden:YES];
     [_activityIndicator stopAnimating];
 }];
于 2013-02-04T18:55:24.473 に答える
2

Swift でシンプルextensionに:UIImageView

extension UIImageView {

    func setImageWithString(string: String?) {

        if let string = string, let url = NSURL(string: string) {

            let activityIndicatorView = UIActivityIndicatorView(frame: CGRectMake(0, 0, CGRectGetWidth(frame), CGRectGetHeight(frame)))
            activityIndicatorView.hidden = false
            activityIndicatorView.color = UIColor.lightGrayColor()

            addSubview(activityIndicatorView)
            bringSubviewToFront(activityIndicatorView)

            activityIndicatorView.startAnimating()

            setImageWithURLRequest(NSURLRequest(URL: url), placeholderImage: nil, success: { request, response, image in

                self.image = image
                activityIndicatorView.hidden = true
                activityIndicatorView.stopAnimating()
                activityIndicatorView.removeFromSuperview()

                }, failure: { request, response, error in

                    activityIndicatorView.hidden = true
                    activityIndicatorView.stopAnimating()
                    activityIndicatorView.removeFromSuperview()
            })
        }
    }
}
于 2016-02-14T07:45:28.653 に答える