2016-12-20 2 views
0

tableview 안에 collectionview을 사용하여 비동기 적으로 다운로드되는 이미지를 보여줍니다. 내가해야 할 일은 그 이미지를 쥐어 짜지 않고 보여주는 것입니다. collectionview의 높이를 일정하게 유지하고 이미지를 다운로드 한 후 크기를 계산합니다. UIIamgeView UIViewContentModeScaleAspectFit의 콘텐츠 모드를 유지합니다. 이것이 내 의도 한 결과를 얻기 위해 내가 한 일입니다. 이미지 크기 조정에 대한높이를 일정하게 유지하면서 UIImageView의 contentmode UIViewContentModeScaleAspectFit을 사용하여 이미지 품질을 잃지 않도록하는 방법은 무엇입니까?

- (void)configureMediaCell:(MediaContainerViewCell *)weakCell withMediaItem:(MSZWallPostMedia *)mediaItem withDownloadImage:(UIImage *)image{ 
    if (mediaItem.isFrameSet == NO) { 
     weakCell.isFrameSet = YES; 
     weakCell.cellImageView.image = image; 
     weakCell.cellImageView.contentMode = UIViewContentModeScaleAspectFit; 
     CGRect frame = weakCell.cellImageView.frame; 

     //Image Scaling 
     CGSize scaleSize = [self imageScale:weakCell.cellImageView]; 

     scaleSize.width = scaleSize.width * image.size.width; 
     scaleSize.height = scaleSize.height * image.size.height; 
     frame.size.width = scaleSize.width; 
     frame.size.height = scaleSize.height; 
     weakCell.cellImageView.frame = frame; 
     mediaItem.frame = frame; 
     mediaItem.isFrameSet = YES; 
     [weakCell.activityIndicatorView stopAnimating]; 
     [self.collectionView reloadItemsAtIndexPaths:@[weakCell.indexPath]]; 
    } else { 
     [weakCell.activityIndicatorView stopAnimating]; 
     weakCell.cellImageView.image = image; 
     weakCell.cellImageView.frame = mediaItem.frame; 
     weakCell.cellImageView.contentMode = UIViewContentModeScaleAspectFit; 
    } 
} 

:

- (CGSize)imageScale : (UIImageView *)imageView { 
    CGFloat sx = imageView.frame.size.width/imageView.image.size.width; 
    CGFloat sy = imageView.frame.size.height/imageView.image.size.height; 
    CGFloat s = 1.0; 
    switch (imageView.contentMode) { 
     case UIViewContentModeScaleAspectFit: 
      s = fminf(sx, sy); 
      return CGSizeMake(s, s); 
      break; 

     case UIViewContentModeScaleAspectFill: 
      s = fmaxf(sx, sy); 
      return CGSizeMake(s, s); 
      break; 

     case UIViewContentModeScaleToFill: 
      return CGSizeMake(sx, sy); 

     default: 
      return CGSizeMake(s, s); 
    } 
} 
이 방법의 문제는 내가 올바른 너비와 높이를 얻을 수 있지만, 일부 이미지는 내가 이미지 뷰의 Aspectfit 속성을 사용하고 있기 때문에 분명하다있는 작은 도시이다

하는 첨부 된 화면에 표시됩니다.

Images

이에 관한 어떤 도움을 주시면 감사하겠습니다. 나는 그들이 고정되고 가변 너비의 높이를 유지하는 것처럼 이미지를 유지할 필요가있다.

답변

0

정확하게 이해하면. 이미지 폭/높이 비율을 찾고 원하는 높이를 곱하면됩니다.

예 :

이미지

폭 = 30, 높이 = 10


= 폭, 높이 = 7

비 = 10분의 30

셀 폭 = 7 * (30/10)는 21

셀 크기는 (21,7)


될 것이다 = 희망이 당신이 의미 한 것입니다. 그러나 이미지가 셀보다 작 으면 문제가 발생합니다. 그러면 왜곡 될 수 있습니다.