11

如果我有两个 UIColors,在任意大小的区域上绘制均匀渐变的最佳方法是什么?

我猜你会创建一个 UIView 子类并在 drawRect 方法中使用 CG 绘图方法。我只是不知道哪些,或者是否有任何需要注意的陷阱,比如性能。有人做过吗?

4

7 回答 7

50
#import <QuartzCore/QuartzCore.h>    
- (void) setGradient {
    CAGradientLayer *gradient = [CAGradientLayer layer];
    gradient.frame = self.view.bounds;
    gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor whiteColor] CGColor], (id)[[UIColor blackColor] CGColor], nil];
    [self.view.layer insertSublayer:gradient atIndex:0];     
}

不要忘记将 QuartzCore 库添加到您的项目中。

于 2013-03-08T19:56:35.073 回答
20

你会想要使用 CGGradient。请参阅 iPhone 开发中心“ CGGradient 参考”文档。

于 2008-10-22T18:41:36.997 回答
3

添加渐变的 Swift 方法是:

    var view : UIView = UIView(frame: CGRectMake(0, 0, 320, 100))
    var g : CAGradientLayer = CAGradientLayer()
    g.frame = gradientView.bounds
    g.colors = ["000000".UIColor.CGColor , "111111".UIColor.CGColor]
    view.layer.insertSublayer(g, atIndex: 0)

UIColor()是 Swift 转换为的辅助类hex colorrgb color强烈推荐。

于 2015-01-25T11:06:23.990 回答
0

我发现使用 CAGradientLayer 产生了一个带有明显步进的渐变最终使用了这个

http://evilrockhopper.com/tag/cggradient/

根据这个问题Gradients on UIView and UILabels On iPhone

于 2013-03-21T08:57:59.303 回答
0

对于绘制文本的视图,例如UILabelUITextView和,您应该在函数UITextField内添加渐变。(有关示例,drawRect请参见此帖子)。

, ,有一些很棒的子类UILabel,它们让您可以很容易地添加渐变(请参阅GitHub 上的 JBGradient)。UITextViewUITextField

于 2014-06-26T18:26:32.483 回答
0

与@Anton Chikin 相同的解决方案,但更强大。请注意 ... 的覆盖,layerClass这样,您不必担心设置框架,并且框架会在旋转和调整大小时自动更新。

class GradientView: UIView {

    var colorA : UIColor = UIColor.greenColor() {
        didSet { updateGradient() }
    }
    var colorB : UIColor = UIColor.blueColor() {
        didSet { updateGradient() }
    }

    override class func layerClass() -> AnyClass {
        return CAGradientLayer.self
    }

    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        updateGradient()
    }

    func updateGradient() {
        if let gLayer = layer as? CAGradientLayer {
            gLayer.colors = [colorA.CGColor, colorB.CGColor]
        }
    }

}

如果您使用的是 IB,则可以通过“用户定义的运行时属性”设置属性。

如果您不使用 IB,请使用其他初始化程序。

于 2014-12-01T20:36:59.020 回答
0

嗨,您可以使用以下方法在视图上应用渐变

-(void)applyGradientEffecttoView:(UIView *)aView
 {
     // Create the colors

     UIColor *darkOp = [UIColor colorWithRed:0.0f green:0.0f blue:0.0f alpha:1.0];
     UIColor *lightOp =[UIColor colorWithRed:255.0f green:255.0f blue:255.0f alpha:0.0];

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

      // Set colors
      gradient.colors = [NSArray arrayWithObjects:
                        (id)lightOp.CGColor,
                        (id)darkOp.CGColor,
                        nil];
     gradient.locations = [NSArray arrayWithObjects:
                          [NSNumber numberWithFloat:0.0f],
                          [NSNumber numberWithFloat:0.5],
                          nil];

    // Set bounds
     gradient.frame = aView.bounds;

   // Add the gradient to the view

  [aView.layer insertSublayer:gradient atIndex:0];
}
于 2015-10-06T08:51:42.127 回答