3

現在、Facebookのプロフィール写真を取得してから、その写真をCCSpriteに変換したいと考えています。

これまでのところ、私のコードは次のようになります:

//fbId is facebook id of someone
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"https://graph.facebook.com/%@/picture?type=normal", fbId]];
NSData *data = [NSData dataWithContentsOfURL:url];
UIImage *image = [UIImage imageWithData:data];

//convert UIImage to CCSprite
CCTexture2D *texture = [[[CCTexture2D alloc] initWithImage:image resolutionType:kCCResolutionUnknown] retain];
CCSprite *sprite = [CCSprite spriteWithTexture:texture];
[self addChild:sprite];

動作しますが、ロードされるまでに数秒ほど時間がかかります。

私の質問は、インターネット接続以外に、Facebook のプロフィール画像をできるだけ速く読み込むためのより良い方法はありますか? ありがとう

4

2 に答える 2

7

ネットワーク コードをメイン スレッドに配置すると、UI がブロックされ、ユーザー エクスペリエンスが低下します。定期的に、そのようなことを別のスレッドに入れる必要があります。派遣を利用してみる

dispatch_queue_t downloader = dispatch_queue_create("PicDownloader", NULL);
dispatch_async(downloader, ^{
    NSData *data = [NSData dataWithContentsOfURL:url];
    UIImage *image = [UIImage imageWithData:data];
    dispatch_async(dispatch_get_main_queue(), ^{
        CCTexture2D *texture = [[[CCTexture2D alloc] initWithImage:image resolutionType:kCCResolutionUnknown] retain];
        CCSprite *sprite = [CCSprite spriteWithTexture:texture];
        [self addChild:sprite];
    });
});

または、必要に応じてJBAsyncImageViewを試すことができます。たぶん、CCSpriteにハックする必要があります:)

于 2012-12-05T04:35:28.853 に答える
1

1 つは、 AFNetworkingを使用して画像データを非同期的に要求することです。私の推測では、これが遅延の原因です。この数秒間、UI がロックされることがあります。そのデータを非同期に呼び出すと、これが解決されます。さらに良いことに、Facebook の iOS SDKを使用して画像を呼び出すことを検討してください。

于 2012-12-05T04:25:28.870 に答える