【问题标题】:Gradient in corner角落渐变
【发布时间】:2014-09-16 13:28:00
【问题描述】:

我想创建一个具有右上角和左下角渐变的背景视图 我如何做到这一点?

我有这个代码

  CAGradientLayer *gradient = [CAGradientLayer layer];
    gradient.frame = self.bounds;
    gradient.colors = [NSArray arrayWithObjects: (id)[[UIColor whiteColor] CGColor],(id)[[UIColor blackColor] CGColor], nil];
    gradient.startPoint = CGPointZero;
    [self.layer insertSublayer:gradient atIndex:0];

但它没有做我想做的事,我不知道如何让它做我想做的事。

当前结果:

想要的结果是:

【问题讨论】:

  • 你的代码渲染了什么?
  • @Larme 查看编辑后的帖子

标签: ios uiview gradient


【解决方案1】:

这应该可以解决问题:

CAGradientLayer *gradient = [CAGradientLayer layer];
[gradient setFrame:[self bounds]];

//Pink color to set with your needs
UIColor *pinkColor = [UIColor colorWithRed:1 green:105/255.0 blue:180/255.0 alpha:1];
gradient.colors = @[(id)[pinkColor CGColor],
                    (id)[[UIColor whiteColor] CGColor],
                    (id)[[UIColor whiteColor] CGColor],
                    (id)[pinkColor CGColor]];

//You may have to change these values to your needs.
[gradient setLocations:@[@(0.0), @(0.2), @(0.8), @(1.0)]];

//From Upper Right to Bottom Left
[gradient setStartPoint:CGPointMake(1, 0)];
[gradient setEndPoint:CGPointMake(0, 1)];

//Apply
[[self layer] insertSublayer:gradient atIndex:0];

您必须阅读有关CAGradientLayer 的文档。

【讨论】:

  • 如何使角看起来像是圆的一部分,而不是三角形?
  • 你画的是“径向渐变”!我不明白。然后:stackoverflow.com/questions/8125623/…
  • 由于我不明白这个答案的意思,这对我没有多大帮助,你能解释一下吗?
  • 颜色按照我的意愿绘制,但我希望它们在每个角落都是圆的 1/4
  • 您希望它们以“圆圈”的方式出现,因此您必须阅读/使用/尝试我链接的另一个问题中的一些链接。
【解决方案2】:

我能想到的最好方法是绘制两个径向渐变并填充其余部分。请注意,如果其中任何一个应该(部分)透明,则需要进行一些调整。

func + (origin:CGPoint, offset:CGSize) -> CGPoint {
    return CGPoint(x: origin.x + offset.width, y: origin.y + offset.height)
}

class GradientView : UIView {

    override func drawRect(rect: CGRect) {
        let context = UIGraphicsGetCurrentContext()
        CGContextSaveGState(context)

        let topLeft = CGPoint(x: 0, y: 0)
        let bottomRight = self.bounds.origin + self.bounds.size

        let colors = [
            UIColor.purpleColor(),
            UIColor.redColor(),
            UIColor.redColor()
            ].map { $0.CGColor as AnyObject! }
        let points : [CGFloat] = [0.0, 0.75, 1.0]
        let gradient = CGGradientCreateWithColors(nil, colors, points)

        CGContextSetFillColorWithColor(context, UIColor.redColor().CGColor)
        CGContextFillRect(context, self.bounds)
        CGContextDrawRadialGradient(context, gradient, topLeft, 0, topLeft, self.bounds.size.width, 0)
        CGContextDrawRadialGradient(context, gradient, bottomRight, 0, bottomRight, self.bounds.size.width, 0)

        CGContextRestoreGState(context)
    }

}

【讨论】:

    猜你喜欢
    • 2023-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-28
    • 2016-12-13
    • 2018-04-17
    • 1970-01-01
    相关资源
    最近更新 更多