it-swarm.com.ru

Получить ширину измененного изображения после UIViewContentModeScaleAspectFit

У меня есть свой UIImageView, и я помещаю в него изображение, размер которого я изменяю следующим образом:

UIImageView *attachmentImageNew = [[UIImageView alloc] initWithFrame:CGRectMake(5.5, 6.5, 245, 134)];
attachmentImageNew.image = actualImage;
attachmentImageNew.backgroundColor = [UIColor redColor];
attachmentImageNew.contentMode = UIViewContentModeScaleAspectFit;

Я попытался получить ширину измененного изображения в моем UIImageView, выполнив это:

NSLog(@"Size of pic is %f", attachmentImageNew.image.size.width);

Но это на самом деле возвращает мне ширину оригинальной картинки. Любые идеи о том, как я могу получить кадр изображения, которое я вижу на экране?

Правка: Вот как выглядит моя UIImageView, красная область - это backgroundColor

enter image description here

24
Sergey Grischyov

Я не знаю, есть ли более четкое решение, но это работает:

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;
43
Mikhail

Решение в 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)
1
iagomr

в твоем случае:

float yourScaledImageWitdh =  attachmentImageNew.frame.size.height *  attachmentImageNew.image.size.width / attachmentImageNew.image.size.height
NSLog(@"width of resized pic is %f", yourScaledImageWitdh);

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

0
meronix

Согласно документации Apple для UIViewContentModeScaleAspectFit 

Он масштабирует content (в вашем случае actualImage), чтобы соответствовать размеру view (в вашем случае attachmentImageNew), поддерживая соотношение сторон.

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

Обновление :

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

CGSize newSize = CGSizeMake(100.0,50.0);
UIGraphicsBeginImageContext( newSize );
[image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
0
Bhavin

Для Swift 2 вы можете использовать этот фрагмент кода для выравнивания изображения aspectFmitted по bottomscreen (взяты из предыдущих ответов) на этот вопрос -> спасибо вам, ребята)

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)
}
0
datayeah

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

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

0
fibnochi