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
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With