J'ai mon UIImageView et j'y place une image que je redimensionne comme ceci:
UIImageView *attachmentImageNew = [[UIImageView alloc] initWithFrame:CGRectMake(5.5, 6.5, 245, 134)];
attachmentImageNew.image = actualImage;
attachmentImageNew.backgroundColor = [UIColor redColor];
attachmentImageNew.contentMode = UIViewContentModeScaleAspectFit;
J'ai essayé d'obtenir la largeur de l'image redimensionnée dans ma UIImageView
en procédant comme suit:
NSLog(@"Size of pic is %f", attachmentImageNew.image.size.width);
Mais cela me renvoie réellement la largeur de la photo d'origine. Des idées sur comment puis-je obtenir le cadre de l'image que je vois à l'écran?
EDIT: Voici à quoi ressemble ma UIImageView
, la zone rouge correspond à sa backgroundColor
Je ne sais pas s'il existe une solution plus claire, mais cela fonctionne:
float widthRatio = imageView.bounds.size.width / imageView.image.size.width;
float heightRatio = imageView.bounds.size.height / imageView.image.size.height;
float scale = MIN(widthRatio, heightRatio);
float imageWidth = scale * imageView.image.size.width;
float imageHeight = scale * imageView.image.size.height;
Une solution à Swift:
let currentHeight = imageView.bounds.size.height
let currentWidth = imageView.bounds.size.width
let newWidth = UIScreen.mainScreen().bounds.width
let newHeight = (newWidth * currentHeight) / currentWidth
println(newHeight)
dans ton cas:
float yourScaledImageWitdh = attachmentImageNew.frame.size.height * attachmentImageNew.image.size.width / attachmentImageNew.image.size.height
NSLog(@"width of resized pic is %f", yourScaledImageWitdh);
mais vous devez également vérifier, avant, la proportion de l'image d'origine par rapport à la proportion de l'image, ma ligne de code est bonne au cas où la zone rouge serait ajoutée horizontalement, et non si la proportion de l'image d'origine était plus large que la proportion du cadre de l'image.
Selon la documentation Apple pourUIViewContentModeScaleAspectFit
Il redimensionne le contenu (dans votre cas, realImage) en fonction de la taille du view (dans votre cas, attachementImageNew) en conservant le rapport de format .
Cela signifie que la taille de votre image (après la mise à l'échelle) doit être identique à celle de votre UIImageView
.
UPDATE:
Une nouvelle suggestion si vous ne souhaitez pas utiliser UIViewContentModeScaleAspectFit
et si vous pouvez corriger la taille de scaledImage
, vous pouvez utiliser le code ci-dessous pour redimensionner l'image afin de corriger newSize, puis utiliser la largeur de votre code.
CGSize newSize = CGSizeMake(100.0,50.0);
UIGraphicsBeginImageContext( newSize );
[image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
Pour Swift 2 _, vous pouvez utiliser cet extrait de code pour aligner une image aspectFitted sur le en bas de la écran (échantillonné à partir de réponses précédentes à cette question -> merci à vous les gars)
let screenSize: CGRect = UIScreen.mainScreen().bounds
let screenWidth = CGFloat(screenSize.width)
let screenHeight = CGFloat(screenSize.height)
imageView.frame = CGRectMake(0, screenHeight - (imageView.image?.size.height)! , screenWidth, (imageView.image?.size.height)!)
let newSize:CGSize = getScaledSizeOfImage(imageView.image!, toSize: self.view.frame.size)
imageView.frame = CGRectMake(0, screenHeight - (newSize.height) , screenWidth, newSize.height)
func getScaledSizeOfImage(image: UIImage, toSize: CGSize) -> CGSize
{
let widthRatio = toSize.width/image.size.width
let heightRatio = toSize.height/image.size.height
let scale = min(widthRatio, heightRatio)
let imageWidth = scale*image.size.width
let imageHeight = scale*image.size.height
return CGSizeMake(imageWidth, imageHeight)
}
Il a la référence de votre image originale, donne donc toujours les mêmes dimensions que l’image originale.
Pour obtenir les dimensions de la nouvelle image, vous devez vérifier les proportions. J'ai dérivé une formule pour mon besoin en utilisant différentes images de taille différente en utilisant Aperçu pour redimensionner l'image en fonction de son rapport de format.