在视图内部的矩形内绘制一个简单的线性渐变

Oli*_*ver 1 cocoa-touch gradient linear-gradients ios

我正在阅读关于渐变的文档,我有点迷失了.我有一个视图,在该视图中,我只想在rect(小于视图)中从下到上绘制一个简单的黑色到灰色的线性渐变.如果没有子类化任何东西,我怎么能这样做(我读过许多需要子视图的东西)?

我正在寻找一种方法,就像我在各种平台上所做的一样简单.像(语言免费:-)):

blackcolor = MakeBlack();
whiteColor = MakeWhite();

startPoint = MakeStartPoint();
endPoint = MakeEndPoint();

onthisgraphicport = SetGraphicPort(self.view);
clippingRect = MakeClipRect();

DrawGradient(from:whiteColor, to:blackcolor, from:startPoint, to:endPoint, onthisgraphicport, intoThisRect:clippingRect);
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助.

cut*_*ine 5

此代码段可能会有所帮助.我不久前在网上找到了这段代码.不幸的是,我忘记了网站,所以不确定谁给予信任.

代码为白色到黑色渐变.只需根据需要更改矩形和颜色即可.

@interface MyView : UIView {
    CGGradientRef _gradientRef;
}

@end

@implementation MyView

- (void) dealloc
{
    [super dealloc];
}

- (id) initWithFrame:(CGRect)frame {
    if ((self = [super initWithFrame:frame])) {
        CGColorSpaceRef rgb = CGColorSpaceCreateDeviceRGB();
        CGFloat colors[] =
        {
            1.0f, 1.0f, 1.0f, 1.0f,
            0.0f, 0.0f, 0.0f, 1.0f,
        };
        _gradientRef = CGGradientCreateWithColorComponents(rgb, colors, NULL, sizeof(colors) / (sizeof(colors[0]) * 4));
        CGColorSpaceRelease(rgb);
    }

    return self;
}

- (void) drawRect:(CGRect)rect {
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGPoint start = rect.origin;
    start.y = 0;
    CGPoint end = CGPointMake(rect.origin.x, rect.size.height);
    CGContextDrawLinearGradient(context, _gradientRef, start, end, kCGGradientDrawsBeforeStartLocation | kCGGradientDrawsAfterEndLocation);

    [super drawRect:rect];
}

@end
Run Code Online (Sandbox Code Playgroud)

  • 同时释放渐变. (2认同)