iPhone : Getting the size of an image after AspectFt
iphone, uiimageview
Solution
I have written a quick category on UIImageView to achieve that:
(.h)
@interface UIImageView (additions)
- (CGSize)imageScale;
@end
(.m)
@implementation UIImageView (additions)
- (CGSize)imageScale {
CGFloat sx = self.frame.size.width / self.image.size.width;
CGFloat sy = self.frame.size.height / self.image.size.height;
CGFloat s = 1.0;
switch (self.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);
}
}
@end
Multiply the original image size by the given scale, and you'll get your actual displayed image size.
Problem
Real odd one to get stuck on but weirdly I am. You you have a `imageView` containing a image. You size that `imageView` down and then tell it to use `UIViewContentModeScaleAspectFit`. so your `imageView` might be 300 by 200 but your scaled image within could be 300 by 118 or 228 by 200 because its `aspectfit`. How on earth do you get the size of the actual image? `imageView.image.size` is the size of the original image. `imageview.frame` is the frame of the `imageview` not the contained image. `imageview.contentstretch` does not work either