2017-04-07 1 views
0

私は以下のコードを使ってサーバーから画像を取得しています。私は動力学的な画像の高さを取得し、スクロールビューで画像を追加したい。スクロールビューのdispatch_asyncメソッドでダイナミックな画像の高さを取得するには

下のコードから、dispatch_asyncメソッドの外側の高さを取得すると、ゼロが表示されます。

どのように非同期画像の読み込みで画像の動的な高さを得ることができますか。

- (void)viewDidLoad { 
[self LoadViewPublicEvents]; 
} 

-(void) LoadViewPublicEvents 
{ 

    for (int i=0;i<arrayPublicEvents.count;i++) 
    { 

     UIImageView *img_vw1=[[UIImageView alloc] init]; 

     dispatch_async(dispatch_get_global_queue(0, 0), ^{ 
      NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://abc.us/uploads/event/%@",[[arrayPublicEvents objectAtIndex:i] valueForKey:@"image"]]]]; 
      UIImage *images = [[UIImage alloc]initWithData:imageData]; 
      dispatch_async(dispatch_get_main_queue(), ^{ 
       img_vw1.image = images; 
       scaledHeight = images.size.height; 
      }); 

     }); 

     NSLog(@"%f",scaledHeight); // it print zero 
     img_vw1.backgroundColor=[UIColor clearColor]; 
     img_vw1.frame=CGRectMake(0,y+5,screen_width,197); 
     [img_vw1 setContentMode:UIViewContentModeScaleAspectFit]; 

     img_vw1.backgroundColor=[UIColor clearColor]; 
     [self.scrll_vw addSubview:img_vw1]; 

    } 
} 

事前に感謝

+0

dispatch_async(dispatch_get_main_queue() 、^ { img_vw1.image = images; }); <---このブロック(または非同期部分)をCGFloat height = images.size.heightで単純に拡張します。 – Lepidopteron

+0

私の編集コードを見てください。どのように私は高さの変数@鱗翅目を使用する必要があります – diksha

答えて

0

あなたのコードは:あなたがイメージをロードする前に

NSLog(@"%f",scaledHeight); // it print zero 
img_vw1.backgroundColor=[UIColor clearColor]; 
img_vw1.frame=CGRectMake(0,y+5,screen_width,197); 
[img_vw1 setContentMode:UIViewContentModeScaleAspectFit]; 

img_vw1.backgroundColor=[UIColor clearColor]; 
[self.scrll_vw addSubview:img_vw1]; 

は、実行されています。

したがって、スレッドが終了するまでセマフォーを使用することができます。これを待つか、ブロック内に置く必要があります。

あなたはそれがメインブロックにそれを置くことは理にかなってUIを変更したいと:詳細については

UIImageView *img_vw1=[[UIImageView alloc] init]; 

    dispatch_async(dispatch_get_global_queue(0, 0), ^{ 
     NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://abc.us/uploads/event/%@",[[arrayPublicEvents objectAtIndex:i] valueForKey:@"image"]]]]; 
     UIImage *images = [[UIImage alloc]initWithData:imageData]; 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      img_vw1.image = images; 
      scaledHeight = images.size.height; 

      NSLog(@"%f",scaledHeight); // it print zero 
      img_vw1.backgroundColor=[UIColor clearColor]; 
      img_vw1.frame=CGRectMake(0,y+5,screen_width,197); 
      [img_vw1 setContentMode:UIViewContentModeScaleAspectFit]; 

      img_vw1.backgroundColor=[UIColor clearColor]; 
      [self.scrll_vw addSubview:img_vw1]; 
     }); 

    }); 

は、ここでは、Appleのドキュメントへのリンクです:https://developer.apple.com/library/content/documentation/General/Conceptual/ConcurrencyProgrammingGuide/OperationQueues/OperationQueues.html

関連する問題