2011-11-11 10 views
4

Est-il possible de redimensionner un UIImage à la taille du cadre? Prenez une grande image et "forcez-la" dans la petite boîte.Comment redimensionner une image dans un cadre?

S'il vous plaît donner un exemple

+0

Quel cadre? Précisez s'il vous plaît. –

Répondre

4

Si vous parlez en fait de changer la UIImage et non pas seulement de changer le cadre d'affichage, qui peut être fait comme décrit par Mark, en changeant le UIViewContentMode de l'UIImageView, vous pouvez changer la taille de l'image réelle avec l'extension UIImage suivante (tirée de cette source)

- (UIImage*)imageByScalingAndCroppingForSize:(CGSize)targetSize 
{ 
    UIImage *sourceImage = self; 
    UIImage *newImage = nil;   
    CGSize imageSize = sourceImage.size; 
    CGFloat width = imageSize.width; 
    CGFloat height = imageSize.height; 
    CGFloat targetWidth = targetSize.width; 
    CGFloat targetHeight = targetSize.height; 
    CGFloat scaleFactor = 0.0; 
    CGFloat scaledWidth = targetWidth; 
    CGFloat scaledHeight = targetHeight; 
    CGPoint thumbnailPoint = CGPointMake(0.0,0.0); 

    if (CGSizeEqualToSize(imageSize, targetSize) == NO) 
    { 
     CGFloat widthFactor = targetWidth/width; 
     CGFloat heightFactor = targetHeight/height; 

     if (widthFactor > heightFactor) 
      scaleFactor = widthFactor; // scale to fit height 
     else 
      scaleFactor = heightFactor; // scale to fit width 
     scaledWidth = width * scaleFactor; 
     scaledHeight = height * scaleFactor; 

     // center the image 
     if (widthFactor > heightFactor) 
     { 
      thumbnailPoint.y = (targetHeight - scaledHeight) * 0.5; 
     } 
     else 
      if (widthFactor < heightFactor) 
      { 
       thumbnailPoint.x = (targetWidth - scaledWidth) * 0.5; 
      } 
    }  

    UIGraphicsBeginImageContext(targetSize); // this will crop 

    CGRect thumbnailRect = CGRectZero; 
    thumbnailRect.origin = thumbnailPoint; 
    thumbnailRect.size.width = scaledWidth; 
    thumbnailRect.size.height = scaledHeight; 

    [sourceImage drawInRect:thumbnailRect]; 

    newImage = UIGraphicsGetImageFromCurrentImageContext(); 
    if(newImage == nil) 
     NSLog(@"could not scale image"); 

    //pop the context to get back to the default 
    UIGraphicsEndImageContext(); 
    return newImage; 
} 
2

possible de duper cette question: How to scale a UIImageView proportionally?

Je vais copier le texte de réponse acceptée aussi bien. En supposant que votre cadre est un uiview:

imageView.contentMode = UIViewContentModeScaleAspectFit; fera ce que vous voulez.

de la documentation, voici les autres options de mise à l'échelle

UIViewContentMode 

Specifies how a view adjusts its content when its size changes. 
typedef enum { 
    UIViewContentModeScaleToFill, 
    UIViewContentModeScaleAspectFit, 
    UIViewContentModeScaleAspectFill, 
    UIViewContentModeRedraw, 
    UIViewContentModeCenter, 
    UIViewContentModeTop, 
    UIViewContentModeBottom, 
    UIViewContentModeLeft, 
    UIViewContentModeRight, 
    UIViewContentModeTopLeft, 
    UIViewContentModeTopRight, 
    UIViewContentModeBottomLeft, 
    UIViewContentModeBottomRight, 
} UIViewContentMode; 

pomme Documentation ici: http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIImageView_Class/Reference/Reference.html

+0

il parle de UIImage - ceci n'évolue pas l'image mais seulement ce qui est dessiné par la vue –

Questions connexes