J'ai une vue d'image, déclarée par programme, et je règle son image, aussi par programme.
Cependant, je me trouve incapable de régler l'image à la fois l'ajustement de l'aspect et aligner le centre à la vue de l'image.
En d'autres termes, je veux que l'image:
Comment je reçois ça?
Juste coller la solution:
Tout comme @manohar a dit
imageView.contentMode = UIViewContentModeCenter; if (imageView.bounds.size.width > ((UIImage*)imagesArray[i]).size.width && imageView.bounds.size.height > ((UIImage*)imagesArray[i]).size.height) { imageView.contentMode = UIViewContentModeScaleAspectFit; }
résolu mon problème
En langage rapide, nous pouvons définir le mode de contenu de la vue UIImage comme suit:
let newImgThumb = UIImageView(frame: CGRect(x: 10, y: 10, width: 100, height: 100)) newImgThumb.contentMode = .scaleAspectFit
[your_imageview setContentMode:UIViewContentModeCenter];
Définir le contentMode de imageView à UIViewContentModeScaleAspectFit
était suffisant pour moi. Il semble centrer les images aussi. Je ne sais pas pourquoi les autres utilisent une logique basée sur l'image. Voir aussi cette question: iOS aspect fit et centre
J'ai résolu ce problème comme ça.
UIImageView
(avec UIViewContentModeScaleAspectFit
) (CGSize imageSize = imageView.image.size)
UIImageView
resize. [imageView sizeThatFits:imageSize]
Je voulais que UIView soit placé au centre de UICollectionViewCell
. donc, j'ai utilisé cette fonction.
- (void)setImageToCenter:(UIImageView *)imageView { CGSize imageSize = imageView.image.size; [imageView sizeThatFits:imageSize]; CGPoint imageViewCenter = imageView.center; imageViewCenter.x = CGRectGetMidX(self.contentView.frame); [imageView setCenter:imageViewCenter]; }
Ça marche pour moi.
Vous pouvez y parvenir en définissant le mode contenu de l'affichage de l'image sur UIViewContentModeScaleAspectFill.
Ensuite, utilisez la méthode method suivante pour get l'object uiimage redimensionné.
- (UIImage*)setProfileImage:(UIImage *)imageToResize onImageView:(UIImageView *)imageView { CGFloat width = imageToResize.size.width; CGFloat height = imageToResize.size.height; float scaleFactor; if(width > height) { scaleFactor = imageView.frame.size.height / height; } else { scaleFactor = imageView.frame.size.width / width; } UIGraphicsBeginImageContextWithOptions(CGSizeMake(width * scaleFactor, height * scaleFactor), NO, 0.0); [imageToResize drawInRect:CGRectMake(0, 0, width * scaleFactor, height * scaleFactor)]; UIImage *resizedImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return resizedImage; }
Edité ici (Version rapide)
func setProfileImage(imageToResize: UIImage, onImageView: UIImageView) -> UIImage { let width = imageToResize.size.width let height = imageToResize.size.height var scaleFactor: CGFloat if(width > height) { scaleFactor = onImageView.frame.size.height / height; } else { scaleFactor = onImageView.frame.size.width / width; } UIGraphicsBeginImageContextWithOptions(CGSizeMake(width * scaleFactor, height * scaleFactor), false, 0.0) imageToResize.drawInRect(CGRectMake(0, 0, width * scaleFactor, height * scaleFactor)) let resizedImage = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() return resizedImage; }
Cette sous-class utilise le centre si l'image n'est pas plus grande que la vue, sinon elle est réduite. J'ai trouvé cela utile pour un UIImageView
qui change la taille.
L'image affichée est plus petite que la vue pour les grandes tailles, mais plus grande que la vue pour les petites tailles. Je le veux seulement pour réduire, mais pas vers le haut.
class CenterScaleToFitImageView: UIImageView { override var bounds: CGRect { didSet { adjustContentMode() } } override var image: UIImage? { didSet { adjustContentMode() } } func adjustContentMode() { guard let image = image else { return } if image.size.width > bounds.size.width || image.size.height > bounds.size.height { contentMode = .ScaleAspectFit } else { contentMode = .Center } } }
let bannerImageView = UIImageView(); bannerImageView.contentMode = .ScaleAspectFit; bannerImageView.frame = CGRectMake(cftX, cftY, ViewWidth, scrollHeight);