iphone - 使 UIView 的背景成为渐变而不使用子类

标签 iphone uiview subclass

有没有办法使 UIView 的背景成为渐变而不对其进行子类化?我也不想使用图像文件来完成此任务。仅仅为了绘制背景渐变而必须子类化 UIView 似乎很愚蠢。

最佳答案

您可以使用+[UIColor colorWithPatternImage:]来生成图案背景。示例(带上您自己的 CGGradient):

// Allocate color space
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
// Allocate bitmap context
CGContextRef bitmapContext = CGBitmapContextCreate(NULL, 320, 480, 8, 4 * 320, colorSpace, kCGImageAlphaNoneSkipFirst);
//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);
// Draw Gradient Here
CGContextDrawLinearGradient(bitmapContext, myGradient, CGPointMake(0.0f, 0.0f), CGPointMake(320.0f, 480.0f), 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:image]];

不过,创建一个 UIView 子类可能会更简单。它也会使用更少的内存。

关于iphone - 使 UIView 的背景成为渐变而不使用子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/844710/

相关文章:

iphone - 在应用程序启动时从 Storyboard中选择替代的第一个 View Controller

iphone - 寻找一种优雅的方法来检查字典中是否存在键

ios - 从 XIB 加载时不遵守约束

java - 如何在另一个类而不是其父类(super class)中调用子类方法?

iphone - 重复调用webservice, objective-c

iphone - 跨 iOS 平台的视频规范

ios - 在 iOS 7 的 Landspace 中锁定一个 UIview

iphone - UIView 动画 block 不做任何更改

javascript - Javascript 类中的子方法

ios - UIButton 的子类不工作