gpt4 book ai didi

ios - 绘制辐射渐变 : : CGContextDrawPath: invalid context 0x0

转载 作者:行者123 更新时间:2023-11-29 11:00:57 25 4
gpt4 key购买 nike

我正在使用最新的 SDK 开发 iOS 5.0+ 应用。

我是 CoreGraphics 的新手,我不知道如何在 CALayer 上绘制辐射渐变。

我发现我必须使用 CGContextDrawRadialGradient绘制辐射渐变。

在 Google 上搜索,我看到我必须将辐射渐变添加到 CALayer 的内容中,但要绘制它我需要 CGContext ,而且我不知道如何获取此 CGContext

你知道我该怎么做吗?

我找到了这个 tutorial , 但它也使用 CGContext

我的代码是这样的:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

@property (weak, nonatomic) IBOutlet UIView *testView;

@end

实现:

#import "ViewController.h"
#import <QuartzCore/QuartzCore.h>

@interface ViewController ()

- (void)drawRadiantGradient;

@end

@implementation ViewController

@synthesize testView = _testView;

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[self drawRadiantGradient];
}

- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

- (void)drawRadiantGradient
{
CGContextRef context = UIGraphicsGetCurrentContext();
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();

CGFloat redBallColors[] = {
1.0, 0.9, 0.9, 0.7,
1.0, 0.0, 0.0, 0.8
};
CGFloat glossLocations[] = {0.05, 0.9};
CGGradientRef ballGradient = CGGradientCreateWithColorComponents(colorSpace, redBallColors, glossLocations, 2);
CGRect circleBounds = CGRectMake(20, 250, 100, 100);
CGPoint startPoint = CGPointMake(50, 270);
CGPoint endPoint = CGPointMake(70, 300);
CGContextDrawRadialGradient(context, ballGradient, startPoint, 0, endPoint, 50, 0);
CGContextAddEllipseInRect(context, circleBounds);
CGContextDrawPath(context, kCGPathStroke);
}

我想创建一个CALayer,绘制一个辐射渐变,并将这个CALayer添加到_testView

最佳答案

您可以在自己的上下文中绘制(例如使用 UIGraphicsBeginImageContextWithOptions()

创建的图像上下文)

成为该层的委托(delegate)并使用 drawLayer:inContext:

绘制到层图形上下文中

我觉得您想做第二个选项。您将创建 CALayer 并将自己设置为委托(delegate)。然后实现 drawLayer:inContext: 并使用作为参数传递的上下文。

设置

CALayer *yourLayer = [CALayer layer];
// other layer customisation
yourLayer.delegate = self;

画画

- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx {
// Check that the layer argument is yourLayer (if you are the
// delegate to more than one layer)

// Use the context (second) argument to draw.
}

关于ios - 绘制辐射渐变 : <Error>: CGContextDrawPath: invalid context 0x0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15965538/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com