用于不同视图的 CAGradientLayer

Posted

技术标签:

【中文标题】用于不同视图的 CAGradientLayer【英文标题】:CAGradientLayer for different views 【发布时间】:2014-01-23 21:33:45 【问题描述】:

我想用CAGradientLayer 为不同尺寸的多个视图创建一个颜色渐变。我不知道如何单独定义框架:

UIColor *darkOp = [UIColor colorWithRed:0.2f green:0.2f blue:0.27f alpha:1.0];
UIColor *lightOp = [UIColor colorWithRed:0.36f green:0.35f blue:0.42f alpha:1.0];

// Create the gradient
CAGradientLayer *gradient = [CAGradientLayer layer];

// Set colors
gradient.colors = [NSArray arrayWithObjects:
                   (id)darkOp.CGColor,
                   (id)lightOp.CGColor,
                   nil];
//set radius
gradient.cornerRadius = 5.0;

// Set bounds BUT just for one view size
gradient.frame = self.numberRegionView.bounds; //<-- here I can just define one frame size

// Add the gradient to one view
[self.numberRegionView.layer insertSublayer:gradient atIndex:0];

//but how to add the gradient layer to views with different sizes ???
//[self.graphRegionView.layer insertSublayer:gradient atIndex:0]; ???
//[self.barRegionView.layer insertSublayer:gradient atIndex:0];   ???

谢谢!

【问题讨论】:

为什么不为每个新的视图/尺寸创建一个新的渐变层呢?我不确定是否要重新使用 CAGradientLayer。 谢谢Putz,这肯定行得通,但我希望找到一种解决方案,可以避免多次重复相同的代码。 我将发布一些代码作为答案,以表明它并不是真正重复的代码。随心所欲地使用它。 【参考方案1】:
-(void)setGradientForView:(UIView*)view

    static UIColor *darkOp = [UIColor colorWithRed:0.2f green:0.2f blue:0.27f alpha:1.0];
    static UIColor *lightOp = [UIColor colorWithRed:0.36f green:0.35f blue:0.42f alpha:1.0];

    // Create the gradient
    CAGradientLayer *gradient = [CAGradientLayer layer];

    // Set colors
    gradient.colors = [NSArray arrayWithObjects:
                   (id)darkOp.CGColor,
                   (id)lightOp.CGColor,
                   nil];
    //set radius
    gradient.cornerRadius = 5.0;

    // Set bounds BUT just for one view size
    gradient.frame = view.bounds; //<-- here I can just define one frame size

    // Add the gradient to one view
    [view.layer insertSublayer:gradient atIndex:0];

然后将这段代码用于您的三个视图:

[self setGradientForView:self.numberRegionView];
[self setGradientForView:self.barRegionView];
[self setGradientForView:self.numberRegionView];

【讨论】:

但是 view.bounds 中的视图现在是一个未声明的标识符。 我喜欢这样。非常感谢你。渐变视图尺寸不会针对更大的屏幕尺寸进行更新。任何的想法?还是谢谢!

以上是关于用于不同视图的 CAGradientLayer的主要内容,如果未能解决你的问题,请参考以下文章

一个 QStandardItemModel 用于不同的 QTableView、通用视图和特定视图

在 xib 文件视图之外设置视图以适应滚动视图 + 不同的 xib 用于方向 - iOs

Django admin 不同的内联用于更改和添加视图

模型视图演示者 - 相同的视图,不同的演示者

具有不同所有者的 SQL Server 所有权链跨架构,用于从多个架构中选择视图

如何在一个视图中将一个 UIPickerView 用于多个文本字段?