2017-05-31 4 views
0

SDWebImageを使用してイメージをロードしてキャッシュしています。私は自分のtableViewCellにロードしています。私は、より良いスクロールのパフォーマンスを得るためにイメージのサイズを変更したいし、UIImageViewの拡張としてresize関数を書いて、イメージをimageViewのサイズにリサイズします。解決策を探す私はSDWebImageManager関数を使って画像をキャッシュする前に画像のサイズを変更することができますが、唯一の問題はパラメータがUIImageなのでImageViewに合わせてサイズを変更できないことです。みんなは私のことを知っている。これは私が現時点でやっていることです。パフォーマンスにはやや悪いです。セルが表示されるたびにサイズが変更されるためです。サイズはもちろんImageViewのサイズです。UIImageViewのサイズを考慮して、キャッシュ前にSDWebImageのサイズを変更するには

cell.firstImage.sd_setImage(with: URL(string: image0Uri), completed: { (img, err, cache, url) in 
        cell.firstImage.resize(toSize: size) 
       }) 

答えて

0

これは、コードのちょうど1ラインよりも少し複雑です、あなたは手動でイメージをロードする必要がある場合があり、それをリサイズし、その後、フェッチ、その後、独自のキーをキャッシュするためにそれを保存下RESOあなたのキー

たぶん、このような何か:

SDImageCache.shared().queryCacheOperation(forKey: "KEY", done: { (image, data, type) in 
     if let image = image { 
      self.firstImage.image = image 
     } else { 
      if let imgUrl = url { 
       SDWebImageManager.shared().loadImage(with: URL(string: imgUrl), options: [], progress: nil) { (image, data, error, type, done, url) in 
        image.resize(toSize: size) 
        self.firstImage.image = image 
        SDImageCache.shared().store(image, forKey: "KEY", completion: nil) 
       }) 
      } else { 
       self.firstImage.image = UIImage(named: "img_default") 
      } 
     } 
    }) 
+0

これは私が思ったものですが、SDWebImageで実装する方法がわかりませんでした。右の1つ、ありがとう! –

+0

申し訳ありませんが、後半の回答が、私はついにそれを試して、それは完全に動作するようです:)多くのありがとう! –

0

イメージを取得後にサイズを変更できます。ちょうど画像と画像の高さと幅を渡す。

[cell.imgview sd_setImageWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@",Image_URL2]] placeholderImage:[UIImage imageNamed:@"imagename"] completed:^(UIImage image, NSError error, SDImageCacheType cacheType, NSURL *imageURL) { 
       if (image) { 
        cell.imgview.image=[Utility compressImageDynamic:image hight:(360 [UIScreen mainScreen].bounds.size.width)/320 width:(360 [UIScreen mainScreen].bounds.size.width)/320]; 

       } 
       else{ 

       } 
      }]; 

以下は、reSizeイメージの機能です。

-(UIImage)compressImageDynamic:(UIImage)image hight:(float)x width:(float)y{ 
float actualHeight = image.size.height; 
float actualWidth = image.size.width; 
float maxHeight = x; 
float maxWidth = y; 
float imgRatio = actualWidth/actualHeight; 
float maxRatio = maxWidth/maxHeight; 
float compressionQuality = 1;//50 percent compression 

if (actualHeight > maxHeight || actualWidth > maxWidth){ 
    if(imgRatio < maxRatio){ 
     //adjust width according to maxHeight 
     imgRatio = maxHeight/actualHeight; 
     actualWidth = imgRatio * actualWidth; 
     actualHeight = maxHeight; 
    } 
    else if(imgRatio > maxRatio){ 
     //adjust height according to maxWidth 
     imgRatio = maxWidth/actualWidth; 
     actualHeight = imgRatio * actualHeight; 
     actualWidth = maxWidth; 
    } 
    else{ 
     actualHeight = maxHeight; 
     actualWidth = maxWidth; 
    } 
}else{ 
    actualHeight = maxHeight; 
    actualWidth = maxWidth; 
    compressionQuality = 1; 
} 

CGRect rect = CGRectMake(0.0, 0.0, actualWidth, actualHeight); 
UIGraphicsBeginImageContext(rect.size); 
[image drawInRect:rect]; 
UIImage *img = UIGraphicsGetImageFromCurrentImageContext(); 
NSData *imageData = UIImageJPEGRepresentation(img, compressionQuality); 
UIGraphicsEndImageContext(); 

return [UIImage imageWithData:imageData]; 

}

+0

ザッツほぼ正確に私はすでにやっているものを、問題がキャッシュされ、元の画像は、それがないということですか?私はサイズ変更されたイメージをキャッシュしたいので、サイズ変更機能を何度も呼び出す必要はありません –

関連する問題