আমি প্রোগ্রামিয়ালি একটি শক্ত রঙ দ্বারা ভরাট একটি ইউআইআইমেজ তৈরি করতে চাই। সুইফটে কীভাবে এটি করবেন তা সম্পর্কে কারও ধারণা আছে?
আমি প্রোগ্রামিয়ালি একটি শক্ত রঙ দ্বারা ভরাট একটি ইউআইআইমেজ তৈরি করতে চাই। সুইফটে কীভাবে এটি করবেন তা সম্পর্কে কারও ধারণা আছে?
উত্তর:
আর একটি দুর্দান্ত সমাধান, সুইফট ২.২ সামঞ্জস্যপূর্ণ, এইভাবে ইউআইআইমেজে আরেকটি কনস্ট্রাক্টর তৈরি করা:
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())
অথবা, allyচ্ছিকভাবে, কাস্টম আকার সহ চিত্রটি তৈরি করুন:
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)
রেফ: ডেভেলপার.এপ্লে
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
}
এটি আপনার সুইফট কোডে আটকে দিন এবং কল করুন
সুইফট ৩.১:
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
উত্তরটি হিসাবে পদ্ধতিটি যথেষ্ট, কারণ আমি মনে করি প্রত্যেকে এটিকে একটি ইউআইআইজেভিউ ভিউয়ের সাথে একসাথে ব্যবহার করবে না
@ নিউনির দুর্দান্ত উত্তরে একটি সামান্য টুইট, যাতে কলিং কোডটি সিজি সাইজ তৈরি করার প্রয়োজন হয় না, এবং নামটি পরিবর্তন করে অন্য অনেকের সাথে সংঘর্ষ না ঘটে:
সুইফট 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))
}
}
}
আপনি নতুন আইওএস 10 ইউআইজিগ্রাফিকস আইমেজরেন্ডারার ব্যবহার করতে পারেন API ।
সুইফট ৩.১- এ ইউআইকিওলারের একটি বর্ধন এখানে রয়েছে
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 সংস্করণে সুইফট করুন:
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
নেই তবে ওএস এক্সে রয়েছে you আপনি কি এর জন্য কোনও কাস্টম লাইব্রেরি বা বিভাগ ব্যবহার করছেন?