如何以编程方式创建一部分黑色的UIImage RGB渐变

时间:2014-01-13 16:54:49

标签: ios objective-c ios7 uiimageview uiimage

我想要生成一个UIImage,它是一个RGB渐变,左侧也有一部分黑色。我想以编程方式执行此操作,而不必在Photoshop中制作图像并将其用作应用程序中的资源。

我在这里搜索过并看过之前生成的iOS色轮,但没有像我在Photoshop中嘲笑的矩形那样:

这将允许用户在触摸UIImage内部时更改文本颜色。

我不确定从哪里开始,并且会欣赏一些指示。

color

2 个答案:

答案 0 :(得分:2)

以下代码创建一个渐变[来自红色,黄色,绿色,蓝色,红色]并返回RGB值(如果触摸它)。以下代码可用于任意数量的颜色,只需设置它们的值in colors Array。
所选颜色设置为selectedColorView(UIView)的backgroundColor。

ViewController.h文件

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController
@end

ViewController.m文件

#import "ViewController.h"
#import <QuartzCore/QuartzCore.h>
@interface ViewController ()
@end

@implementation ViewController{
    UIView *selectedColorView;
    CAGradientLayer *layer;
}
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}
- (void)viewDidLoad
{
    [super viewDidLoad];
    layer =[CAGradientLayer layer];
    [layer setFrame:CGRectMake(20, 20, 280, 50)];
    layer.colors =@[(id)[UIColor redColor].CGColor,(id)[UIColor yellowColor].CGColor,(id)[UIColor greenColor].CGColor,(id)[UIColor blueColor].CGColor,(id)[UIColor redColor].CGColor];
    layer.startPoint =CGPointMake(0, .5);
    layer.endPoint =CGPointMake(1, .5);
    [self.view.layer addSublayer:layer];

    selectedColorView =[[UIView alloc] initWithFrame:CGRectMake(20, 20+50, 280, 50)];
    [self.view addSubview:selectedColorView];

}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    CGPoint p = [[touches anyObject] locationInView:self.view];
    if(CGRectContainsPoint(layer.frame, p)){
        CGFloat xOffset = (p.x - layer.frame.origin.x);
        CGFloat gap=(layer.frame.size.width/(layer.colors.count-1));
        NSInteger index = xOffset/gap;
        xOffset =xOffset -index*gap;

        UIColor *color1=[UIColor colorWithCGColor:(CGColorRef)layer.colors[index]];
        UIColor *color2=[UIColor colorWithCGColor:(CGColorRef)layer.colors[index+1]];
        CGFloat r1,g1,b1,a1,r2,g2,b2,a2;
        [color1 getRed:&r1 green:&g1 blue:&b1 alpha:&a1];
        [color2 getRed:&r2 green:&g2 blue:&b2 alpha:&a2];

        selectedColorView.backgroundColor =[UIColor colorWithRed:(1-(xOffset/gap))*r1 +(xOffset/gap)*r2 green:(1-(xOffset/gap))*g1 +(xOffset/gap)*g2 blue:(1-(xOffset/gap))*b1 +(xOffset/gap)*b2 alpha:1.0];
    }
}
@end

答案 1 :(得分:0)

我认为您可以在上下文中绘制渐变颜色,然后创建此上下文的图像。

或者你也可以这样做。 http://belencruz.com/2012/12/gradient-background-in-ios-without-images/