如何以编程方式在 Segment Controller 中调整图像 - Swift
How to fit an image inside SegmentController programmatically - Swift
我需要在 SegmentController 中设置图像 - Swift。
let testTypeSegmentedControl: UISegmentedControl = {
let types = [“Green”, “Blue”] // v_concreteSelectedIndex
let sc = UISegmentedControl(items: types)
sc.setImage((UIImage(named: "Green_Main.png")), forSegmentAt: 0)
sc.selectedSegmentIndex = 0
sc.translatesAutoresizingMaskIntoConstraints = false
sc.tintColor = .black
return sc
}()
如何在段控制器中正确修复图像。
我试过了:
sc.contentMode = .scaleAspectFill
但似乎效果不佳。
我尝试使用约束,但我不知道该怎么做。
任何建议如何进行?
结果不是您所期望的,因为您使用的原始 .png 图像分辨率更高。您永远不应使用 "big" 图像来仅显示一个小图片。整个图像将加载到内存中,并且只显示其像素的 10%,因此您将白白占用大量内存。
如果你真的想使用这个资源,你可以做的是用之前的代码创建一个新的图像,并使用这个新生成的图像。
下面的方法returns你可以在你的UISegmentedControl
中使用一个新的图像,你可以发布一个大的
func image(with image: UIImage?, scaledTo newSize: CGSize) -> UIImage? {
UIGraphicsBeginImageContext(newSize)
image?.draw(in: CGRect(x: 0, y: 0, width: newSize.width, height: newSize.height))
let newImage: UIImage? = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return newImage
}
在您的代码中:
let testTypeSegmentedControl: UISegmentedControl = {
let sc = UISegmentedControl(items: ["One", "Two"])
sc.selectedSegmentIndex = 0
sc.translatesAutoresizingMaskIntoConstraints = false
return sc
}()
override func viewDidLoad() {
super.viewDidLoad()
self.view.addSubview(testTypeSegmentedControl)
let newImage = image(with: (UIImage(named: "watermelon.png")), scaledTo: CGSize(width: 32, height: 30))
testTypeSegmentedControl.setImage(newImage , forSegmentAt: 0)
}
我需要在 SegmentController 中设置图像 - Swift。
let testTypeSegmentedControl: UISegmentedControl = {
let types = [“Green”, “Blue”] // v_concreteSelectedIndex
let sc = UISegmentedControl(items: types)
sc.setImage((UIImage(named: "Green_Main.png")), forSegmentAt: 0)
sc.selectedSegmentIndex = 0
sc.translatesAutoresizingMaskIntoConstraints = false
sc.tintColor = .black
return sc
}()
如何在段控制器中正确修复图像。
我试过了:
sc.contentMode = .scaleAspectFill
但似乎效果不佳。
我尝试使用约束,但我不知道该怎么做。
任何建议如何进行?
结果不是您所期望的,因为您使用的原始 .png 图像分辨率更高。您永远不应使用 "big" 图像来仅显示一个小图片。整个图像将加载到内存中,并且只显示其像素的 10%,因此您将白白占用大量内存。
如果你真的想使用这个资源,你可以做的是用之前的代码创建一个新的图像,并使用这个新生成的图像。
下面的方法returns你可以在你的UISegmentedControl
中使用一个新的图像,你可以发布一个大的
func image(with image: UIImage?, scaledTo newSize: CGSize) -> UIImage? {
UIGraphicsBeginImageContext(newSize)
image?.draw(in: CGRect(x: 0, y: 0, width: newSize.width, height: newSize.height))
let newImage: UIImage? = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return newImage
}
在您的代码中:
let testTypeSegmentedControl: UISegmentedControl = {
let sc = UISegmentedControl(items: ["One", "Two"])
sc.selectedSegmentIndex = 0
sc.translatesAutoresizingMaskIntoConstraints = false
return sc
}()
override func viewDidLoad() {
super.viewDidLoad()
self.view.addSubview(testTypeSegmentedControl)
let newImage = image(with: (UIImage(named: "watermelon.png")), scaledTo: CGSize(width: 32, height: 30))
testTypeSegmentedControl.setImage(newImage , forSegmentAt: 0)
}