जवाबों:
एक और अच्छा समाधान, स्विफ्ट 2.2 संगत, इस तरह से, UIImage में एक और निर्माणकर्ता बनाना है:
public extension UIImage {
public convenience init?(color: UIColor, size: CGSize = CGSize(width: 1, height: 1)) {
let rect = CGRect(origin: .zero, size: size)
UIGraphicsBeginImageContextWithOptions(rect.size, false, 0.0)
color.setFill()
UIRectFill(rect)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
guard let cgImage = image?.CGImage else { return nil }
self.init(CGImage: cgImage)
}
}
इस तरह से आप इस तरह से कस्टम रंग-छवि बना सकते हैं:
let redImage = UIImage(color: .redColor())
या, वैकल्पिक रूप से, एक कस्टम आकार के साथ छवि बनाएं:
let redImage200x200 = UIImage(color: .redColor(), size: CGSize(width: 200, height: 200))
स्विफ्ट 3.0
public extension UIImage {
public convenience init?(color: UIColor, size: CGSize = CGSize(width: 1, height: 1)) {
let rect = CGRect(origin: .zero, size: size)
UIGraphicsBeginImageContextWithOptions(rect.size, false, 0.0)
color.setFill()
UIRectFill(rect)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
guard let cgImage = image?.cgImage else { return nil }
self.init(cgImage: cgImage)
}
}
UIGraphicsBeginImageContextWithOptions(rect.size, true, 1.0)
Ref: developer.apple.com/library/ios/documentation/UIKit/Reference/…
image
? ऐसा करने की आवश्यकता क्यों है? self.init(cgImage: cgImage)
UIImage
एक निर्माणकर्ता में बनाए गए नए के साथ स्वयं को "प्रतिस्थापित" नहीं कर सकते हैं , लेकिन आप UIImage.init(cgImage: )
इसके बजाय निर्माता के माध्यम से चेन कर सकते हैं ।
self.init(cgImage: cgImage, scale: image!.scale, orientation: image!.imageOrientation)
यहाँ एक और विकल्प है। मेरा मानना है कि आप एक सटीक UIImage ऑब्जेक्ट चाहते थे।
func getImageWithColor(color: UIColor, size: CGSize) -> UIImage {
let rect = CGRectMake(0, 0, size.width, size.height)
UIGraphicsBeginImageContextWithOptions(size, false, 0)
color.setFill()
UIRectFill(rect)
let image: UIImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
इसे अपने स्विफ्ट कोड में चिपकाएं और कॉल करें
स्विफ्ट 3.1:
func getImageWithColor(color: UIColor, size: CGSize) -> UIImage {
let rect = CGRect(x: 0, y: 0, width: size.width, height: size.height)
UIGraphicsBeginImageContextWithOptions(size, false, 0)
color.setFill()
UIRectFill(rect)
let image: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
return image
}
UIRectMake(0, 0, size.width, size.height)
, यह सही लगता है CGRectMake(0, 0, size.width, size.height)
:।
let
बजाय उपयोग करने का प्रयास करें var
; यहां न की तरह लगता है rect
और न ही image
उपयोग करना चाहिए var
घोषणा।
स्विफ्ट 4 संस्करण:
extension UIColor {
func image(_ size: CGSize = CGSize(width: 1, height: 1)) -> UIImage {
return UIGraphicsImageRenderer(size: size).image { rendererContext in
self.setFill()
rendererContext.fill(CGRect(origin: .zero, size: size))
}
}
}
उपयोग:
let image0 = UIColor.orange.image(CGSize(width: 128, height: 128))
let image1 = UIColor.yellow.image()
एक क्लीनर दृष्टिकोण एक UIImage
विस्तार के अंदर तर्क को बदलना होगा :
import UIKit
extension UIImage {
class func imageWithColor(color: UIColor) -> UIImage {
let rect: CGRect = CGRectMake(0, 0, 1, 1)
UIGraphicsBeginImageContextWithOptions(CGSizeMake(1, 1), false, 0)
color.setFill()
UIRectFill(rect)
let image: UIImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
}
अब उपभोक्ता कॉल कर सकता है, UIImage.imageWithColor(UIColor.blackColor())
काली पृष्ठभूमि के साथ एक छवि बनाने के लिए।
class ViewController: UIViewController {
@IBOutlet weak var imageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
imageView.backgroundColor = UIColor.redColor()
}
}
इसी तरह की विधि यदि आप छवि को खुद बनाना चाहते हैं तो IBOutlet के माध्यम से कनेक्ट कर सकते हैं।
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
var frame = CGRectMake(100,100,100,100)
var imageView2 = UIImageView(frame: frame)
imageView2.backgroundColor = UIColor.redColor()
self.view.addSubview(imageView2)
}
}
एंथोनीलियाओ से तीसरी विधि उधार। थोड़ा और जटिल:
class ViewController: UIViewController {
func getImageWithColor(color: UIColor, size: CGSize) -> UIImage {
UIGraphicsBeginImageContextWithOptions(size, false, 0)
color.setFill()
UIRectFill(CGRectMake(0, 0, 100, 100))
var image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
override func viewDidLoad() {
super.viewDidLoad()
var imageView = UIImageView(frame: CGRectMake(100,100,100,100))
let screenImage = getImageWithColor(UIColor.redColor(), size: CGSize(width: 100, height: 100))
imageView.image = screenImage
self.view.addSubview(imageView)
}
}
UIImage
, न कि सेट करने की UIImageView
।
getImageWithColor(color: UIColor, size: CGSize) -> UIImage
उत्तर के रूप में पर्याप्त है, जैसा कि मुझे लगता है कि हर कोई UIImageView के साथ मिलकर इसका उपयोग नहीं करेगा
@ नीनी के उत्कृष्ट उत्तर के लिए एक मामूली ट्वीक, जिससे कॉलिंग कोड को CGSize बनाने की आवश्यकता नहीं है, और कई अन्य लोगों के साथ टकराव न करने के लिए नाम बदल दिया गया है:
स्विफ्ट 4
extension UIColor {
func imageWithColor(width: Int, height: Int) -> UIImage {
let size = CGSize(width: width, height: height)
return UIGraphicsImageRenderer(size: size).image { rendererContext in
self.setFill()
rendererContext.fill(CGRect(origin: .zero, size: size))
}
}
}
आप नए iOS 10 UIGraphicsImageRenderer API का उपयोग कर सकते हैं ।
यहाँ स्विफ्ट 3.1 में UIColor पर एक विस्तार दिया गया है
extension UIColor {
func getImage(size: CGSize) -> UIImage {
let renderer = UIGraphicsImageRenderer(size: size)
return renderer.image(actions: { rendererContext in
self.setFill()
rendererContext.fill(CGRect(x: 0, y: 0, width: size.width, height: size.height))
})
}}
एक अच्छा तरीका यह है कि इस तरह से एक संगणित संपत्ति हो:
extension UIColor {
var imageRepresentation : UIImage {
let rect = CGRect(x: 0.0, y: 0.0, width: 1.0, height: 1.0)
UIGraphicsBeginImageContext(rect.size)
let context = UIGraphicsGetCurrentContext()
context?.setFillColor(self.cgColor)
context?.fill(rect)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image!
}
}
उपयोग:
let redImage = UIColor.red.imageRepresentation
स्विफ्ट 3 संस्करण @anthonyliao का स्वीकृत उत्तर:
class func getImageWithColor(color: UIColor, size: CGSize) -> UIImage
{
let rect = CGRect(origin: CGPoint(x: 0, y: 0), size: CGSize(width: size.width, height: size.height))
UIGraphicsBeginImageContextWithOptions(size, false, 0)
color.setFill()
UIRectFill(rect)
let image: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
return image
}
गोल कोनों वाला आयताकार
extension UIImage {
convenience init?(color: UIColor) {
let rect = CGRect(x: 0, y: 0, width: 10, height: 2)
UIGraphicsBeginImageContextWithOptions(CGSize(width: 10, height: 2), false, 0)
let bezierPath = UIBezierPath(roundedRect: rect, cornerRadius: 8)
color.setFill()
bezierPath.fill()
let image = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
guard let cgImage = image.cgImage else {
return nil
}
self.init(cgImage: cgImage)
}
}
UIImage
एक-initWithSize:andColor:
विधि नहीं है , लेकिनNSImage
ओएस एक्स पर है। क्या आप इसके लिए एक कस्टम लाइब्रेरी या श्रेणी का उपयोग कर रहे हैं?