2016-06-13 4 views
1

Я пытался изменить размер изображения программно, чтобы адаптироваться к размеру экрана, но когда я создаю свое приложение, изображение даже не показывается. Я просто вижу пустой экран, кто-нибудь знает, что я сделал неправильно?resize UIImage программно не работает

Это мой код (узнал, что от некоторых других потоков о изменении размеров изображений):

class ViewControllerSport: UIViewController { 

@IBOutlet weak var FotoSport: UIImageView! 

let screen = UIScreen.mainScreen().bounds 



override func viewDidLoad() { 
    super.viewDidLoad() 

    FotoSport.frame = CGRect(x: 20, y: 20, width: screen.width * 0.5, height: screen.width * 0.5) 
    FotoSport.image = UIImage(named: "Blokker") 


} 
+0

Только быстрое примечание на именовании вы используете, классы должны быть названы с UpperCaseLetters в то время как переменные должны использовать lowerCaseLetters. –

+0

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

+0

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

ответ

1

Следующая функция изменяет размер изображения. Он принимает два аргумента: изображение и желаемый размер.

func ResizeImage(image: UIImage, targetSize: CGSize) -> UIImage { 
    let size = image.size 

    let widthRatio = targetSize.width/image.size.width 
    let heightRatio = targetSize.height/image.size.height 

    // Figure out what our orientation is, and use that to form the rectangle 
    var newSize: CGSize 
    if(widthRatio > heightRatio) { 
     newSize = CGSizeMake(size.width * heightRatio, size.height * heightRatio) 
    } else { 
     newSize = CGSizeMake(size.width * widthRatio, size.height * widthRatio) 
    } 

    // This is the rect that we've calculated out and this is what is actually used below 
    let rect = CGRectMake(0, 0, newSize.width, newSize.height) 

    // Actually do the resizing to the rect using the ImageContext stuff 
    UIGraphicsBeginImageContextWithOptions(newSize, false, 1.0) 
    image.drawInRect(rect) 
    let newImage = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 

    return newImage 
} 

Использование:

self.ResizeImage(UIImage(named: "MyImage.png")!, targetSize: CGSizeMake(320.0, 700.0)) 

ссылка ссылка :: Resize image

Swift 3.0:

func ResizeImage(_ image: UIImage, targetSize: CGSize) -> UIImage? { 
    let size = image.size 

    let widthRatio = targetSize.width/image.size.width 
    let heightRatio = targetSize.height/image.size.height 

    // Figure out what our orientation is, and use that to form the rectangle 
    var newSize: CGSize 
    if(widthRatio > heightRatio) { 
     newSize = CGSize(width: size.width * heightRatio, height: size.height * heightRatio) 
    } else { 
     newSize = CGSize(width: size.width * widthRatio, height: size.height * widthRatio) 
    } 

    // This is the rect that we've calculated out and this is what is actually used below 
    let rect = CGRect(x: 0, y: 0, width: newSize.width, height: newSize.height) 

    // Actually do the resizing to the rect using the ImageContext stuff 
    UIGraphicsBeginImageContextWithOptions(newSize, false, 1.0) 
    image.draw(in: rect) 
    let newImage = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 

    return newImage 
} 

Использование:

self.ResizeImage(UIImage(named: "MyImage.png")!, targetSize: CGSize(width: 320.0, height: 700.0)) 
+0

Спасибо, человек! Это работало как прелесть! –

+0

Вы приветствуете чувака. –

1

-первых, убедитесь, что UIImage(named: "Blokker") возвращает изображение или ноль. Если это возвращающий изображение, чтобы масштабировать изображение в UIImageView вы можете использовать один из них:

UIViewContentModeScaleToFill; 
UIViewContentModeScaleAspectFit; 
UIViewContentModeScaleAspectFill; 

ScaleToFill только масштабирует изображение.

AspectFit и AspectFill масштабирует изображение, сохраняя его соотношение сторон.

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

https://developer.apple.com/library/ios/documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/Art/scale_aspect.jpg

Смежные вопросы