在 CarbonTapSwipeNavigation 上应用渐变色

Posted

技术标签:

【中文标题】在 CarbonTapSwipeNavigation 上应用渐变色【英文标题】:Apply Gradient Colors on CarbonTapSwipeNavigation 【发布时间】:2018-05-15 04:27:18 【问题描述】:

我是 ios 新手。我想在 CarbonTabSwipeNavigation 上应用渐变颜色。我尝试将渐变应用到 CarbonTabSwipeNavigation 的工具栏上,但它不起作用。这是代码。

let carbonTabSwipeNavigation = CarbonTabSwipeNavigation(items: items, delegate: self)
carbonTabSwipeNavigation.toolbar.setGradientToToolbar(default_pri_color: UIColor.DarkBlue(), default_sec_color: UIColor.LightBlue())

这是函数

extension UIToolbar 

    func setGradientToToolbar(default_pri_color: UIColor, default_sec_color: UIColor) 
        let gradient = CAGradientLayer()
        gradient.frame = self.bounds
        gradient.colors = [default_pri_color.cgColor, default_sec_color.cgColor]
        self.layer.insertSublayer(gradient, at: 0)
    

【问题讨论】:

【参考方案1】:

问题在于gradientLayer 框架。当您在其上调用 setGradientToToolbar 方法时,Toolbar 约束尚未布局。因此,bounds 中的所有内容都为零,您无法看到渐变层。

有两种方法可以解决这个问题,

1)您为gradientLayer提供如下框架,

func setGradientToToolbar(default_pri_color: UIColor , default_sec_color:UIColor) 
    let gradient = CAGradientLayer()
    gradient.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 120)            
    gradient.colors = [UIColor.red.cgColor, UIColor.green.cgColor]
    self.layer.insertSublayer(gradient, at: 0)

2) 在您的viewController 完成所有视图的布局后,在工具栏上调用setGradientToToolbar 方法。下面是完整的例子,

import UIKit
import CarbonKit

class ViewController: UIViewController, CarbonTabSwipeNavigationDelegate 

    var carbonTabSwipeNavigation: CarbonTabSwipeNavigation!

    override func viewDidLoad() 
        super.viewDidLoad()

        let items = ["Features", "Products", "About"]
        carbonTabSwipeNavigation = CarbonTabSwipeNavigation(items: items, delegate: self)
        carbonTabSwipeNavigation.toolbarHeight.constant = 120
        carbonTabSwipeNavigation.insert(intoRootViewController: self)
    

    func carbonTabSwipeNavigation(_ carbonTabSwipeNavigation: CarbonTabSwipeNavigation, viewControllerAt index: UInt) -> UIViewController 
        return UIViewController()
    

    override func viewDidLayoutSubviews() 
        carbonTabSwipeNavigation.toolbar.setGradientToToolbar(default_pri_color: .red, default_sec_color: .yellow)
    


extension UIToolbar 

    func setGradientToToolbar(default_pri_color: UIColor , default_sec_color:UIColor) 
        let gradient = CAGradientLayer()
        gradient.frame = self.bounds
        gradient.colors = [default_pri_color.cgColor, default_sec_color.cgColor]
        self.layer.insertSublayer(gradient, at: 0)
    

两者都会给你以下结果,

【讨论】:

以上是关于在 CarbonTapSwipeNavigation 上应用渐变色的主要内容,如果未能解决你的问题,请参考以下文章

秋的潇洒在啥?在啥在啥?

上传的数据在云端的怎么查看,保存在啥位置?

在 React 应用程序中在哪里转换数据 - 在 Express 中还是在前端使用 React?

存储在 plist 中的数据在模拟器中有效,但在设备中无效

如何在保存在 Mongoose (ExpressJS) 之前在模型中格式化数据

如何在保存在 Mongoose (ExpressJS) 之前在模型中格式化数据