如果我有两个UIColors,最佳的方法是如何在任意大小的区域中均匀绘制它们之间的渐变?
我猜你需要创建一个UIView子类,并在drawRect方法中使用CG绘图方法。我只是不知道应该用哪些方法,或者是否存在必须注意的问题,例如性能。是否有人做过这个?
如果我有两个UIColors,最佳的方法是如何在任意大小的区域中均匀绘制它们之间的渐变?
我猜你需要创建一个UIView子类,并在drawRect方法中使用CG绘图方法。我只是不知道应该用哪些方法,或者是否存在必须注意的问题,例如性能。是否有人做过这个?
#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库添加到您的项目中。
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的帮助类,用于将十六进制颜色
转换为RGB颜色
,非常推荐使用。
"000000".UIColor.CGColor
是什么? - JSmythUIColor.whiteColor().CGColor
)非常容易,因为问题是关于渐变而不是颜色的十六进制表示。最后,UIColor()
不是一个帮助类,它是一个内置对象。 - JSmyth-(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];
}
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]
}
}
}
对于绘制文本的视图,例如UILabel
、UITextView
和UITextField
,您应该在drawRect
函数中添加渐变(请参见此文章作为示例)。
有一些很棒的UILabel
、UITextView
和UITextField
子类,可以让您轻松地添加渐变(请参见GitHub上的JBGradient)。