Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 将UIColor(patternImage:)用于UIView';什么颜色?_Ios_Swift_Uiimage_Uisegmentedcontrol_Uicolor - Fatal编程技术网

Ios 将UIColor(patternImage:)用于UIView';什么颜色?

Ios 将UIColor(patternImage:)用于UIView';什么颜色?,ios,swift,uiimage,uisegmentedcontrol,uicolor,Ios,Swift,Uiimage,Uisegmentedcontrol,Uicolor,我正在使用一个UISegmentControl,并试图为每个片段的视图提供一个自定义UIColor。这对于纯色来说很容易做到。我只是: providerSegmentedControl.subviews[1].tintColor = UIColor.red 索引1处的段现在将用红色着色 但是,我正在尝试为我的一个片段的UIView的tintColor添加渐变。我的资产中有一个名为“AppleMusicGradient”的图像,看起来像这样: 我正在尝试使用UIColor(patternIma

我正在使用一个
UISegmentControl
,并试图为每个片段的视图提供一个自定义
UIColor
。这对于纯色来说很容易做到。我只是:

providerSegmentedControl.subviews[1].tintColor = UIColor.red
索引1处的段现在将用红色着色

但是,我正在尝试为我的一个片段的
UIView
tintColor
添加渐变。我的资产中有一个名为“AppleMusicGradient”的图像,看起来像这样:

我正在尝试使用
UIColor(patternImage:)
从此图像创建
UIColor
。代码如下所示:

//UIImage.resize is a UIImage extension function that simply resizes a UIImage to the given CGRect
let image = UIImage(named: "AppleMusicGradient")!.resize(targetSize: providerSegmentedControl.subviews[2].frame.size)
providerSegmentedControl.subviews[2].tintColor = UIColor(patternImage: image)
然而,这种方法似乎只起到了部分作用。当选定给定的线段时,该渐变根本不可见。如果未选择给定的线段,则渐变仅在线段内部的标签上可见,即边界通常看起来不存在


请看“苹果音乐”部分。

我的解决方案感觉有点“黑”,但我相信这可能就是您想要的

@IBOutlet weak var segmentedControl: UISegmentedControl!

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.

    self.updateGradientBackground()
}

private func updateGradientBackground() {
    let sortedViews = segmentedControl.subviews.sorted( by: { $0.frame.origin.x < $1.frame.origin.x } )
    for (index, view) in sortedViews.enumerated() {
        if index == segmentedControl.selectedSegmentIndex {
            view.backgroundColor = UIColor(patternImage: UIImage(named: "7Wk4B")!)
            view.tintColor = UIColor.clear
            let titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
            UISegmentedControl.appearance().setTitleTextAttributes(titleTextAttributes, for: .selected)
            } else {
            view.backgroundColor = UIColor.white
            view.tintColor = UIColor.blue
        }
    }
}

@IBAction func segmentedControllerTapped(_ sender: Any) {
    self.updateGradientBackground()
}
@IBOutlet弱var分段控制:UISegmentedControl!
重写func viewDidLoad(){
super.viewDidLoad()
//加载视图后执行任何其他设置。
self.updateGradientBackground()文件
}
私有函数updateGradientBackground(){
让SortedView=segmentedControl.SubView.sorted(按:{$0.frame.origin.x<$1.frame.origin.x})
用于SortedView.enumerated()中的(索引、视图){
如果索引==segmentedControl.selectedSegmentIndex{
view.backgroundColor=UIColor(patternImage:UIImage(名为:“7Wk4B”)!)
view.tintColor=UIColor.clear
让titleTextAttributes=[NSAttributedString.Key.foregroundColor:UIColor.white]
UISegmentedControl.appearance()
}否则{
view.backgroundColor=UIColor.white
view.tintColor=UIColor.blue
}
}
}
@iAction func segmentedControllerTapped(\发送方:任意){
self.updateGradientBackground()文件
}

我的解决方案感觉有点“黑客”,但我相信这可能就是您想要的

@IBOutlet weak var segmentedControl: UISegmentedControl!

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.

    self.updateGradientBackground()
}

private func updateGradientBackground() {
    let sortedViews = segmentedControl.subviews.sorted( by: { $0.frame.origin.x < $1.frame.origin.x } )
    for (index, view) in sortedViews.enumerated() {
        if index == segmentedControl.selectedSegmentIndex {
            view.backgroundColor = UIColor(patternImage: UIImage(named: "7Wk4B")!)
            view.tintColor = UIColor.clear
            let titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
            UISegmentedControl.appearance().setTitleTextAttributes(titleTextAttributes, for: .selected)
            } else {
            view.backgroundColor = UIColor.white
            view.tintColor = UIColor.blue
        }
    }
}

@IBAction func segmentedControllerTapped(_ sender: Any) {
    self.updateGradientBackground()
}
@IBOutlet弱var分段控制:UISegmentedControl!
重写func viewDidLoad(){
super.viewDidLoad()
//加载视图后执行任何其他设置。
self.updateGradientBackground()文件
}
私有函数updateGradientBackground(){
让SortedView=segmentedControl.SubView.sorted(按:{$0.frame.origin.x<$1.frame.origin.x})
用于SortedView.enumerated()中的(索引、视图){
如果索引==segmentedControl.selectedSegmentIndex{
view.backgroundColor=UIColor(patternImage:UIImage(名为:“7Wk4B”)!)
view.tintColor=UIColor.clear
让titleTextAttributes=[NSAttributedString.Key.foregroundColor:UIColor.white]
UISegmentedControl.appearance()
}否则{
view.backgroundColor=UIColor.white
view.tintColor=UIColor.blue
}
}
}
@iAction func segmentedControllerTapped(\发送方:任意){
self.updateGradientBackground()文件
}

我在想,也许每次细分市场发生变化时都要打电话。谢谢我会尝试一下,让您知道它是如何工作的。是的,请确保您的分段控件已连接到IBOutlet和IBAction。不幸的是,我无法完全让它工作。首先,当设置子视图的
backgroundColor
然后调用
UISegmentedControl.appearance().setTitleTextAttributes()
时,各个片段的文本实际上不会更改。我自己运行了这个程序,当选中时它似乎会更改。背景至少会变成渐变色吗?幸运的是,背景确实变成了渐变色。我不知道为什么文字没有更新我这边的颜色。我在想也许每次片段改变时都要打电话。谢谢我会尝试一下,让您知道它是如何工作的。是的,请确保您的分段控件已连接到IBOutlet和IBAction。不幸的是,我无法完全让它工作。首先,当设置子视图的
backgroundColor
然后调用
UISegmentedControl.appearance().setTitleTextAttributes()
时,各个片段的文本实际上不会更改。我自己运行了这个程序,当选中时它似乎会更改。背景至少会变成渐变色吗?幸运的是,背景确实变成了渐变色。我不知道为什么我这边的文字没有更新颜色。说大卫-与你的问题无关。当你需要这样的梯度时。一件非常好的事情就是。。。。。。。。制作,而不是使用准备好的PNG。(有两个重要原因(1)节省大量空间(2)在每台设备上都能获得精确、令人敬畏、终极的分辨率。)如何:希望是这样interest@Fattie谢谢你的推荐。我避免在渐变中使用
CALayer
的原因是,我不确定如何使用
CALayer
UISegmentedControl
子视图获得类似效果。i、 e.我可以使用
UIImage
设置
tintColor
,不确定我是否可以对
CALayer
说同样的话。说David-与你的问题无关。当你需要这样的梯度时。一件非常好的事情就是。。。。。。。。制作,而不是使用准备好的PNG。(有两个重要原因(1)节省大量空间(2)在每台设备上都能获得精确、令人敬畏、终极的分辨率。)如何:希望是这样interest@Fattie谢谢你的推荐。我避免在渐变中使用
CALayer
的原因是,我不确定如何使用
CALayer
UISegmentedControl
子视图获得类似效果。i、 e.我可以使用
UIImage
设置
tintColor
,但我不确定是否可以