ios - 如何切换CAGradientLayer?

标签 ios swift uiview cagradientlayer

我最初在 viewDidLoad 中的第一个场景中创建了一个 CAGradientLayer。它是这样插入的:

self.view.layer.insertSublayer(myCAGradientLayer, atIndex: 0)

这很好用。但现在我需要在应用程序运行时更改渐变。用户将在场景 2 上做一些事情,然后回到场景 1,其中渐变发生变化。我构建了一个新的 CAGradientLayer 并添加到与上面相同的 View 中。

但是使用 viewWillAppear 不起作用。

这是一个例子:

let gLocations: [Float] = [0.0, 1.0]
let gLayer: CAGradientLayer = CAGradientLayer()
gLayer.colors = [UIColor.yellowColor().CGColor, UIColor.greenColor().CGColor]
gLayer.frame = self.view.bounds
gLayer.locations = gLocations
self.view.layer.insertSublayer(gLayer, atIndex: 0)

将以上内容添加到 viewWillAppear。然后使用不同的颜色将其添加到几个条件中。只有第一个条件选择出现。其他条件中的任何其他颜色都不会出现。

我认为部分问题在于我一直在做:

self.view.layer.insertSublayer(gLayer, atIndex: 0)

否则,渐变会出现在其他 UI 组件之上。我正在使用几种不同的渐变,它们都使用上面的代码。但我猜它们都不能插入到 index=0 处。

还有其他方法可以改变渐变吗?

最佳答案

ViewWillAppear 函数应该可以工作。每次 View 即将激活时都会调用它。

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated);
}

更新
第一个仅显示,因为您的 CAGradientLayer 颜色始终设置为 gLayer.colors = [UIColor.yellowColor().CGColor, UIColor.greenColor().CGColor] .

每当您想要更改颜色时,您都需要将其保存在内存中,以便在您再次进入 View 时知道这一点。这是一个替代解决方案。

创建一个 NSUserDefault 来保存你想要显示的颜色。

// Set - set a new color whenever you want this to be displayed when you show the view next time
// forKey is the unique value to access the object you have saved
NSUserDefaults.standardUserDefaults().setObject("red", forKey: "color"

当您显示 View 时,请执行以下操作:

// Get
let color = NSUserDefaults.standardUserDefaults().stringForKey("color")

if color == "red"{
   gLayer.colors = [UIColor.redColor().CGColor, UIColor.blueColor().CGColor]
}
else if...

关于ios - 如何切换CAGradientLayer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37084768/

相关文章:

iphone - 工具栏上的 xcoded 静音按钮可使 App 的声音静音

ios - Facebook Messenger SDK 分享文本和 url 给 facebook 好友

ios - UIBarButtonItem 在 < iOS 11 上的位置不正确

swift - UITextField 边框未剪裁

ios - 大 subview 以适应另一个小 subview

iOS/swift : How to make a blend of multiple UIViews

swift - 将不带分隔符的字符串转换为 Double/CLLocationDegrees

swift - 如何处理异步 URLRequest 完成?

ios - 如何更快地截取 UIView 屏幕截图?

iphone - 多次验证相同的苹果收据