2014-01-13 2 views
2

Я имею дело с FBProfilePictureView. Я пробовал следующий метод, и он работает.Задержка загрузки FBProfilePictureView

- (void)getUserImageFromFBView 
{ 
UIImage *img = nil; 

for (NSObject *obj in [self.profilePictureView subviews]) { 
    if ([obj isMemberOfClass:[UIImageView class]]) { 
     UIImageView *objImg = (UIImageView *)obj; 
     img = objImg.image; 
     break; 
    } 
} 
} 

Здесь я должен поставить задержку для вызова этого метода, скажем, 5.0f снова в некоторых случаях изображение загрузки не получить завершена в течение этого периода. Есть ли какой-либо возможный способ проверить, завершена ли загрузка изображений в facebook или нет. Также задержка загрузки изображения возникает, когда пользователь меняет изображение профиля в facebook.

Любая помощь приветствуется. Заранее спасибо.

ответ

0

Вы можете использовать структуру изображения загрузчик как SDWebImage и отслеживать, если изображение было загружено или не используя метод

- (id <SDWebImageOperation>)downloadImageWithURL:(NSURL *)url 
             options:(SDWebImageDownloaderOptions)options 
             progress:(SDWebImageDownloaderProgressBlock)progressBlock 
             completed:(SDWebImageDownloaderCompletedBlock)completedBlock; 
+0

Можно ли использовать такие фреймворки для FBProfilePictureView? – QUserS

+0

Я предполагаю, что вы получаете изображение пользователя через graph-api, который в основном является URL-адресом. –

+0

При использовании FBProfilePictureView нет необходимости вызывать graph-api. Просто установите fbUserId как идентификатор профиля FBProfilePictureView. Он отобразит и покажет пользовательский рисунок. – QUserS

4

Вместо этого попробуйте:

- (void) getFBImage 
{ 
    NSString *facebookID = @""; 

    if (![_resultDictionary objectForKey:@"username"] && ![[_resultDictionary objectForKey:@"username"] isEqualToString:@""]) 
    { 
     facebookID = [_resultDictionary objectForKey:@"username"]; 
    } 
    else if ([_resultDictionary objectForKey:@"id"] && ![[_resultDictionary objectForKey:@"id"] isEqualToString:@""]) 
    { 
     facebookID = [_resultDictionary objectForKey:@"id"]; 
    } 

    if ([facebookID isEqualToString:@""]) 
    { 
     return; 
    } 
    else 
    { 
     NSString *string=[NSString stringWithFormat:@"https://graph.facebook.com/%@/picture?width=105&height=109",facebookID]; 

     NSURL *url = [NSURL URLWithString:string]; 

     dispatch_queue_t downloadQueue = dispatch_queue_create("image downloader", NULL); 

     dispatch_async(downloadQueue, ^{ 

      NSData *imgData = [[NSData alloc] initWithContentsOfURL:url]; 

      dispatch_async(dispatch_get_main_queue(), ^{ 

       [_imgDisplay setImage:[UIImage imageWithData:imgData]]; 

      }); 
     }); 
    } 
} 

// _ imgDisplay это мой UIImageView, отображающий изображение профиля Facebook, _resultDictionary содержит пользовательский идентификатор пользователя или имя пользователя.

+0

Спасибо! Он отлично работает с небольшими изменениями. Лучше использовать имя пользователя вместо userid. Тогда изменения профиля pic в facebook будут легко обновляться (но мне интересно, почему !!) – QUserS

+0

Тогда Mark as Right Answer & Vote Up man: P – Xeieshan

Смежные вопросы