2012-03-01 6 views
5

j'ai UIImageView comme subview de UIView (taille 300 x 300). Mon UIImage serait soit portrait, paysage ou certaines tailles impaires. Comment puis-je remplir le UIImage dans la taille d'image UIView sans étirer l'image à 300 x 300?UIImageView remplir UIView

Dans le but de ceci, je vais ajouter un autre UIImageView comme bordure de l'image. S'il vous plaît aider.

Merci.

Répondre

13

Essayez

[img setContentMode:UIViewContentModeScaleAspectFit];

UIViewContentModeScaleAspectFit: redimensionne le contenu à la taille de la vue par maintenir le ratio d'aspect. Toute zone restante des limites de la vue est transparente.

ou [img setContentMode:UIViewContentModeScaleAspectFill];

UIViewContentModeScaleAspectFill: redimensionne le contenu pour remplir la taille de la vue. Certains partie du contenu peut être découpée pour remplir les limites de la vue.

si vous clipping subviews, alors vous devez faire

[imgView clipToBounds:YES]; 
+0

J'ai essayé d'utiliser les 2 modes ci-dessus, mon image ne rentre pas dans 300 x 300 – RockBaby

+0

ivEditImage = [[UIImageView alloc] initWithImage: imgChoosen]; ivEditImage.frame = vwEditingImage.frame; [ivEditImage setContentMode: UIViewContentModeScaleAspectFill]; – RockBaby

+0

même 'UIViewContentModeScaleAspectFit' ne le fait pas? –

0

Utilisez la propriété contentMode de UIImageView.


Edit: et régler la taille de l'image à 300x300 .

0
[image setContentMode:UIViewContentModeScaleToFill]; 
1

Définissez la propriété contentMode de UIImageView à l'une des ces valeurs en fonction de l'endroit où vous voulez le mettre dans le superview:

UIViewContentModeCenter, 
    UIViewContentModeTop, 
    UIViewContentModeBottom, 
    UIViewContentModeLeft, 
    UIViewContentModeRight, 
    UIViewContentModeTopLeft, 
    UIViewContentModeTopRight, 
    UIViewContentModeBottomLeft, 
    UIViewContentModeBottomRight, 

Comme ces valeurs:

UIViewContentModeScaleToFill, 
    UIViewContentModeScaleAspectFit, 
    UIViewContentModeScaleAspectFill, 

L'image sera en effet 300 x 300, ce qui est ce que vous ne voulez pas.

+3

Y a-t-il un moyen de les combiner? Ce que je veux, c'est ceci: supposons une image de 100x10 et un UIImageView en plein écran. Je veux qu'il se développe jusqu'à ce que la taille horizontale soit égale à la largeur UIImageView (disons 320 pour l'iPhone) et que l'image résultante (maintenant à 320x32) soit au sommet. J'ai essayé ceci imgview.contentMode = UIViewContentModeScaleAspectFit | UIViewContentModeTop; mais ça ne marche pas. Il fait juste la partie UIViewContentModeTop (100x10 en haut). – Gik

+0

@Gik - Avez-vous trouvé un moyen de le faire. J'ai exactement le même problème. –

+0

Je l'ai fait en utilisant un truc. J'ai "créé" une autre image (de l'original), étiré pour remplir la plus petite taille, puis rembourré avec les pixels que j'étais "manquant". Donc, à la fin, j'ai obtenu une image 300x300 de l'original. Si vous voulez je pourrais poster le code. – Gik

2

Ah, je viens de relire ce que vous demandiez, je sais quelle est votre question maintenant.

Le cadre de votre UIImageView change et, le cas échéant, votre image. Vous ne voulez pas que votre image pour changer, mais vous ne voulez que votre ImageView pour ajuster pour remplir la vue, il est contenu.

MISE À JOUR

I figured it out.

[self.imageView setContentMode:UIViewContentModeCenter]; 

Quelle que soit l'orientation, la taille reste la même. Vous avez également la possibilité de l'aligner en haut, en bas, à gauche, à droite, en haut à gauche, en haut à droite, en bas à gauche et en bas à droite, ce qui permet d'aligner votre image et non de redessiner l'image.

Cela aide-t-il?

+0

si je redessine, ça va étirer mon image. Y a-t-il une option pour ne pas s'étirer? – RockBaby

Questions connexes