Reputation:
I was trying to resize my image programmatically to adapt to the screen's size, but when I build my app, the image won't even show. I just see a blank screen, does anyone know what I did wrong?
This is my code (learned that from some other threads about resizing images):
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")
}
Upvotes: 3
Views: 6676
Reputation: 2307
The following function resizes an image. It takes two arguments: the image and the desired size.
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
}
Usage :
self.ResizeImage(UIImage(named: "MyImage.png")!, targetSize: CGSizeMake(320.0, 700.0))
Reference link :: 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
}
Usage :
self.ResizeImage(UIImage(named: "MyImage.png")!, targetSize: CGSize(width: 320.0, height: 700.0))
Upvotes: 4
Reputation: 21
First, check that the UIImage(named: "Blokker")
is returning an image or nil.
If it's returning an image, in order to scale an image in UIImageView you can use one of these:
UIViewContentModeScaleToFill;
UIViewContentModeScaleAspectFit;
UIViewContentModeScaleAspectFill;
ScaleToFill just scales the image.
AspectFit and AspectFill scales the image conserving it's aspect ratio.
Fit will scale the image until it will be all shown. Fill will scale the image until one of its sides equals one of UIImageView sides.
Upvotes: 1