Я написал расширение для UIImageView, которое создает новое изображение на основе процентов и изменяет размеры.Заполнение идет снизу вверх.Растрированный PDF выглядит плохо, поэтому теперь я использую png @ 1, @ 2, @ 3.
extension UIImageView {
func progress(to _percent: CGFloat, image: UIImage) {
// restore original image and size in UIImageView
self.image! = image
self.frame.size = image.size
// if less then 0, return 0
var percent = _percent <= 0 ? 1 : _percent
// if more then 100, return 100
percent = percent > 100 ? 100 : percent
let size = CGSize(width: self.frame.size.width, height: self.frame.size.height/100*percent)
UIGraphicsBeginImageContextWithOptions(size, false, self.image!.scale)
self.image!.draw(in: CGRect(x: 0,
y: -self.frame.size.height+size.height,
width: self.image!.size.width,
height: self.image!.size.height))
let croppedImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
self.frame = CGRect(x: self.frame.origin.x,
y: self.frame.height-self.frame.height/100*percent,
width: self.frame.width,
height: self.frame.height/100*percent)
self.image! = croppedImage
}
Как использовать:
@IBOutlet weak var coolantProgress: UIImageView!
let coolantEmptyImage = UIImage.init(named: "coolantFull")
coolantProgress.progress(to: 25, image: coolantEmptyImage!)