UIView 背景渐变与界面生成器视图
Posted
技术标签:
【中文标题】UIView 背景渐变与界面生成器视图【英文标题】:UIView Background Gradient With Interface Builder View 【发布时间】:2013-02-15 23:23:44 【问题描述】:我想使用渐变作为 UIView 的背景。我知道这通常是通过图像和backgroundColor
属性完成的。但是,我想学习如何在代码中做到这一点。使用https://***.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
是视图控制器,containerView
是 UIView
对象的 IB 出口。是的,在这一点上,我想把它作为一种学术练习来做,而不是其他任何事情。我得试试子类和drawRect
方法。
子类和drawRect
方法对我来说效果很好顺便说一句。谢谢@Vinzius!仍然很想知道是否有更直接的方法来使用 IB 视图进行渐变。 :)
好酷 :-) 好吧,做子类并在 IB 中使用它们还不错,这是改善生活的最低要求 xD
【参考方案1】:
我遇到了同样的问题,但最终发现 UIView 尚未在您尝试设置背景渐变的代码中创建,我猜在您的情况下可能是以下之一 -viewDidLoad 或 -viewWillAppear 因为它
self.containerView.bounds 将是 0, 0, 0, 0
相反,你应该在里面设置渐变层
viewDidAppear
此时已创建视图。
【讨论】:
【参考方案2】:该库支持使用 IB_DESIGNABLE / IBInspectable 在 Storyboard 中设置渐变背景。
真的很有用。
https://github.com/recruit-mtl/EXTView/
【讨论】:
以上是关于UIView 背景渐变与界面生成器视图的主要内容,如果未能解决你的问题,请参考以下文章
具有拐角半径和阴影视图的 UIView 不会在拐角处剪辑子视图