Ich verwende eine collectionview
innerhalb einer tableview
zum Anzeigen von Bildern, die asynchron heruntergeladen werden. Was ich tun muss, ist, diese Bilder zu zeigen, ohne zu quetschen. Ich halte die Höhe der collectionview
Konstante konstant und berechne die Größe der Bilder nach dem Download. Ich behalte Content-Modus der UIIamgeView
UIViewContentModeScaleAspectFit. Dies habe ich getan, um mein beabsichtigtes Ergebnis zu erreichen.Wie kann man verhindern, dass die Bildqualität durch den UImageView-Content-Mode UIViewContentModeScaleAspectFit, der die Höhe konstant hält, verloren geht?
- (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;
}
}
Für Bildskalierung:
- (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);
}
}
Das Problem bei diesem Ansatz ist, dass ich die richtigen Breiten und Höhen erhalten, aber einige Bilder sind kleiner dargestellt, das liegt auf der Hand, weil ich Aspectfit
Eigenschaft Imageview bin mit der wird im angehängten Bildschirm angezeigt.
Jede Hilfe in Bezug auf diese würde geschätzt. Ich muss Bilder behalten, da sie Höhe collectionviewitem
feste und variable Breite behalten.