Iphone 将UIView的背景设置为渐变而不进行子分类
有没有一种方法可以使UIView的背景成为渐变,而无需对其进行子类化?我也不希望使用图像文件来实现这一点。只需为背景绘制渐变,就必须将UIView子类化,这似乎很迟钝。您可以使用Iphone 将UIView的背景设置为渐变而不进行子分类,iphone,uiview,subclass,Iphone,Uiview,Subclass,有没有一种方法可以使UIView的背景成为渐变,而无需对其进行子类化?我也不希望使用图像文件来实现这一点。只需为背景绘制渐变,就必须将UIView子类化,这似乎很迟钝。您可以使用+[uicolorWithPatternImage:生成带图案的背景。示例(带上您自己的CGGradient): 不过,创建UIView子类可能会更简单。它也将使用更少的内存。我同意rpetrich,只做UIView子类会更干净。有关如何执行此操作的示例,请参阅。如果您愿意,您可以创建一个通用的gradient UIVi
+[uicolorWithPatternImage:
生成带图案的背景。示例(带上您自己的CGGradient):
不过,创建
UIView
子类可能会更简单。它也将使用更少的内存。我同意rpetrich,只做UIView子类会更干净。有关如何执行此操作的示例,请参阅。如果您愿意,您可以创建一个通用的gradient UIView子类,并简单地将其放置在您希望具有渐变背景的视图后面。我将采用的答案更改为我的版本
+(void) setBlackGradientToView:(UIView*)targetView
{
CGRect frame = targetView.frame;
// Allocate color space
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
//allocate myGradient
CGFloat locationList[] = {0.0f, 1.0f};
CGFloat colorList[] = {0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f};
CGGradientRef myGradient = CGGradientCreateWithColorComponents(colorSpace, colorList, locationList, 2);
// Allocate bitmap context
CGContextRef bitmapContext = CGBitmapContextCreate(NULL, frame.size.width, frame.size.height, 8, 4 * frame.size.width, colorSpace, kCGImageAlphaPremultipliedLast);
//Draw Gradient Here
CGContextDrawLinearGradient(bitmapContext, myGradient, CGPointMake(0.0f, 0.0f), CGPointMake(0, frame.size.height), 0);
// Create a CGImage from context
CGImageRef cgImage = CGBitmapContextCreateImage(bitmapContext);
// Create a UIImage from CGImage
UIImage *uiImage = [UIImage imageWithCGImage:cgImage];
// Release the CGImage
CGImageRelease(cgImage);
// Release the bitmap context
CGContextRelease(bitmapContext);
// Release the color space
CGColorSpaceRelease(colorSpace);
//Create the patterned UIColor and set as background color
[targetView setBackgroundColor:[UIColor colorWithPatternImage:uiImage]];
//return uiImage;
}
你可以做:
Swift>=4.0:
let gradient = CAGradientLayer()
gradient.frame = view.bounds
gradient.colors = [UIColor.red.cgColor, UIColor.white.cgColor]
view.layer.insertSublayer(gradient, at: 0)
let gradient = CAGradientLayer()
gradient.frame = view.bounds
gradient.colors = [UIColor.red().cgColor, UIColor.white().cgColor]
view.layer.insertSublayer(gradient, at: 0)
let gradient = CAGradientLayer()
gradient.frame = view.bounds
gradient.colors = [UIColor.redColor().CGColor, UIColor.whiteColor().CGColor]
view.layer.insertSublayer(gradient, atIndex: 0)
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = self.view.bounds;
gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor redColor] CGColor], (id)[[UIColor whiteColor] CGColor], nil];
[self.view.layer insertSublayer:gradient atIndex:0];
Swift 3.0:
let gradient = CAGradientLayer()
gradient.frame = view.bounds
gradient.colors = [UIColor.red.cgColor, UIColor.white.cgColor]
view.layer.insertSublayer(gradient, at: 0)
let gradient = CAGradientLayer()
gradient.frame = view.bounds
gradient.colors = [UIColor.red().cgColor, UIColor.white().cgColor]
view.layer.insertSublayer(gradient, at: 0)
let gradient = CAGradientLayer()
gradient.frame = view.bounds
gradient.colors = [UIColor.redColor().CGColor, UIColor.whiteColor().CGColor]
view.layer.insertSublayer(gradient, atIndex: 0)
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = self.view.bounds;
gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor redColor] CGColor], (id)[[UIColor whiteColor] CGColor], nil];
[self.view.layer insertSublayer:gradient atIndex:0];
Swift第#2行出现内存泄漏,无法发布cgColorSpaceCreateDeviceGB()良好实现的结果。但有一个问题是,新的视网膜显示设备是否能起作用?(我看到320x480在那里是硬编码的)@chakrit,它仍然可以与视网膜设备一起工作,但只能以1x分辨率渲染渐变;取决于可能足够的坡度。320x480是硬编码的,以使示例更简单–最好使用实际视图大小。@AlexanderPerechnev这是一个
CGGradientRef
,您可以使用CGGradientCreateWithColor
/CGGradientCreateWithColorComponents
创建,谢谢。光滑如丝般当我使用这段代码时,我得到了类似于架构i386未定义符号的错误:“\u OBJC\u CLASS\u$\ u CAGradientLayer”,引用自:@VinothKumar add\35; import
我写了这个“cellForRowAtIndexPath”,这样我可以在每个单元格中显示渐变视图,它工作正常,现在我面临一个问题,同时我上下滚动,渐变颜色越来越暗。如何解决这个问题?@jithin我会用你正在使用的代码发布一个问题。我认为您每次都在添加图层,并且它被tableView重用,因此每次都会使其颜色更深