मुझे पता चला है कि यह जवाब खोजना मुश्किल है कि आप अपने स्विफ्ट 3 प्रोजेक्ट में आउट-ऑफ-द बॉक्स का उपयोग कर सकते हैं । अन्य उत्तरों की मुख्य समस्या यह है कि वे छवि के अल्फा-चैनल का सम्मान नहीं करते हैं। यहां वह तकनीक है जो मैं अपनी परियोजनाओं में उपयोग कर रहा हूं।
extension UIImage {
func scaledToFit(toSize newSize: CGSize) -> UIImage {
if (size.width < newSize.width && size.height < newSize.height) {
return copy() as! UIImage
}
let widthScale = newSize.width / size.width
let heightScale = newSize.height / size.height
let scaleFactor = widthScale < heightScale ? widthScale : heightScale
let scaledSize = CGSize(width: size.width * scaleFactor, height: size.height * scaleFactor)
return self.scaled(toSize: scaledSize, in: CGRect(x: 0.0, y: 0.0, width: scaledSize.width, height: scaledSize.height))
}
func scaled(toSize newSize: CGSize, in rect: CGRect) -> UIImage {
if UIScreen.main.scale == 2.0 {
UIGraphicsBeginImageContextWithOptions(newSize, !hasAlphaChannel, 2.0)
}
else {
UIGraphicsBeginImageContext(newSize)
}
draw(in: rect)
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return newImage ?? UIImage()
}
var hasAlphaChannel: Bool {
guard let alpha = cgImage?.alphaInfo else {
return false
}
return alpha == CGImageAlphaInfo.first ||
alpha == CGImageAlphaInfo.last ||
alpha == CGImageAlphaInfo.premultipliedFirst ||
alpha == CGImageAlphaInfo.premultipliedLast
}
}
उपयोग का उदाहरण:
override func viewDidLoad() {
super.viewDidLoad()
let size = CGSize(width: 14.0, height: 14.0)
if let image = UIImage(named: "barbell")?.scaledToFit(toSize: size) {
let imageView = UIImageView(image: image)
imageView.center = CGPoint(x: 100, y: 100)
view.addSubview(imageView)
}
}
यह कोड अल्फा चैनल के साथ और बिना छवियों के लिए समर्थन के साथ Apple के विस्तार को फिर से लिखना है ।
एक और पढ़ने के रूप में, मैं अलग-अलग छवि के आकार बदलने की तकनीकों के लिए इस लेख की जांच करने की सलाह देता हूं । वर्तमान दृष्टिकोण सभ्य प्रदर्शन प्रदान करता है, यह उच्च-स्तरीय एपीआई और समझने में आसान है। जब तक आपको यह पता नहीं चलता है कि आपके चित्र में एक अड़चन है, तब तक मैं उससे चिपके रहने की सलाह देता हूं।