iPhone: получение размера изображения после AspectFt - PullRequest
25 голосов
/ 28 июля 2011

Реально странно застрять, но я странно.

У вас есть imageView с изображением.Вы уменьшаете размер imageView и затем указываете использовать UIViewContentModeScaleAspectFit.так что ваше imageView может быть 300 на 200, но ваше масштабированное изображение может быть 300 на 118 или 228 на 200, потому что оно aspectfit.

Как же вы получаете размер фактического изображения?1010 * imageView.image.size - это размер исходного изображения.
imageview.frame - это кадр imageview, а не содержащегося изображения.
imageview.contentstretch также не работает

Ответы [ 4 ]

36 голосов
/ 28 июля 2011

Я написал краткую категорию в UIImageView, чтобы добиться этого:

(. 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

Умножить оригиналразмер изображения по заданному масштабу, и вы получите фактический размер отображаемого изображения.

11 голосов
/ 28 июля 2011

хорошо .. ты должен сделать немного математики.у вас есть размер исходного изображения, и у вас есть размер вида изображения .. так что вы можете рассчитать, будет ли оно изменено по высоте или ширине.

, если у вас размер изображения 300x200 и изображение1024x768, вы можете рассчитать, что является ограничивающим фактором

300/1024 = 0.29296875
200/768 = 0.260416667

, поэтому высота является ограничивающим фактором ... изображение будет:

267x200

6 голосов
/ 29 мая 2015

Swift-версия принятого ответа:

extension UIImageView {
var imageScale: CGSize {
    let sx = Double(self.frame.size.width / self.image!.size.width)
    let sy = Double(self.frame.size.height / self.image!.size.height)
    var s = 1.0
    switch (self.contentMode) {
    case .scaleAspectFit:
        s = fmin(sx, sy)
        return CGSize (width: s, height: s)

    case .scaleAspectFill:
        s = fmax(sx, sy)
        return CGSize(width:s, height:s)

    case .scaleToFill:
        return CGSize(width:sx, height:sy)

    default:
        return CGSize(width:s, height:s)
    }
  }
}
4 голосов
/ 27 февраля 2017

Просто добавив немного безопасности для кода Individual11.При вызове imageScale для imageView без реального изображения произойдет сбой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...