【问题标题】:UIView Background Gradient With Interface Builder ViewUIView 背景渐变与界面生成器视图
【发布时间】:2013-02-15 23:23:44
【问题描述】:

我想使用渐变作为 UIView 的背景。我知道这通常是通过图像和backgroundColor 属性完成的。但是,我想学习如何在代码中做到这一点。使用https://stackoverflow.com/a/1931498/99683,我可以通过编程方式创建UIView,并给它一个渐变层。这很好用。

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(20, 340, 280, 100)];
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = view.bounds;
gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor redColor] CGColor], (id)[[UIColor yellowColor] CGColor], nil];
[view.layer insertSublayer:gradient atIndex:0];
[self.view addSubview:view];

但是,如果我在 Interface Builder 中放置一个视图(背景设置为清除)并尝试相同的操作,渐变永远不会出现。

CAGradientLayer *gradient2 = [CAGradientLayer layer];
gradient2.frame = self.containerView.bounds;
gradient2.colors = [NSArray arrayWithObjects:(id)[[UIColor blueColor] CGColor], (id)[[UIColor greenColor] CGColor], nil];
[self.containerView.layer insertSublayer:gradient2 atIndex:0];

我还需要在 IB 或代码中做些什么来完成这项工作吗?

【问题讨论】:

  • 嗨。这里的“自我”是什么?一个 UITableViewCell?我最好的建议是实现一个 UIView 并在 drawRect 方法中进行绘图 :) 如果你想要它那么糟糕的话,然后在你的 XIB 中使用这个 UIView 子类:-) 但这只是个人建议,我不是一个大粉丝IB。
  • self 是视图控制器,containerViewUIView 对象的 IB 出口。是的,在这一点上,我想把它作为一种学术练习来做,而不是其他任何事情。我得试试子类和drawRect 方法。
  • 子类和drawRect 方法对我来说效果很好顺便说一句。谢谢@Vinzius!仍然很想知道是否有更直接的方法来使用 IB 视图进行渐变。 :)
  • 好酷 :-) 好吧,做子类并在 IB 中使用它们还不错,这是改善生活的最低要求 xD

标签: ios ios6


【解决方案1】:

我遇到了同样的问题,但最终发现 UIView 尚未在您尝试设置背景渐变的代码中创建,我猜在您的情况下可能是以下之一 -viewDidLoad 或 -viewWillAppear 因为它

self.containerView.bounds 将是 {{0, 0}, {0, 0}}

相反,你应该在里面设置渐变层

viewDidAppear

此时已创建视图。

【讨论】:

    【解决方案2】:

    该库支持使用 IB_DESIGNABLE / IBInspectable 在 Storyboard 中设置渐变背景。

    真的很有用。

    https://github.com/recruit-mtl/EXTView/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-31
      • 2023-03-19
      • 2022-10-14
      • 1970-01-01
      相关资源
      最近更新 更多