Я разрабатываю приложение iOS 5.0+ с последним SDK.Нарисуйте лучистый градиент: <Error>: CGContextDrawPath: недопустимый контекст 0x0
Я очень новичок в 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
.
Спасибо за ваш ответ. Я вижу этот метод 'drawLayer: inContext:', но я не знаю, должен ли я отправлять ему сообщение или нет. – VansFannel
@VansFannel Если вы являетесь делегатом слоев, тогда этот метод будет вызываться для вас, когда слой будет перерисовываться. –
Я добавил фреймворк QuartzCore, а в файле заголовка я добавил '#import' но я получаю следующую ошибку: 'Невозможно найти объявление протокола для 'CALayerDelegate''. –
VansFannel