4

我正在尝试学习核心动画来开发某个应用程序,但我需要继承 CALayer 类,但是我正在努力让图层自行绘制。

我需要自定义 CALayer 来拥有一些额外的属性并处理自定义事件(触摸等),但是从一开始我正在实现的基本 CALayer 并不是自己绘制的,谁能告诉我我做错了什么?

我有一个MagicSquare

#import "MagicSquare.h"

@implementation MagicSquare


-(id) initWithLayer:(id)layer {
    self = [super initWithLayer:layer];


    self.bounds = CGRectMake(0, 0, 200, 200);
    self.position = CGPointMake(10,10);
    self.cornerRadius = 100;
    self.borderColor = [UIColor redColor].CGColor;
    self.borderWidth = 1.5;

    return self;
}

- (void)drawInContext:(CGContextRef)theContext
{

    NSLog(@"Drawing");
    CGMutablePathRef thePath = CGPathCreateMutable();

    CGPathMoveToPoint(thePath,NULL,15.0f,15.f);
    CGPathAddCurveToPoint(thePath,
                          NULL,
                          15.f,250.0f,
                          295.0f,250.0f,
                          295.0f,15.0f);

    CGContextBeginPath(theContext);
    CGContextAddPath(theContext, thePath );

    CGContextSetLineWidth(theContext,
                          1.0);
    CGContextSetStrokeColorWithColor(theContext,
                                     [UIColor redColor].CGColor);
    CGContextStrokePath(theContext);
    CFRelease(thePath);
}

这就是我试图让它在主控制器上绘制的方式

@implementation BIDViewController

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

    MagicSquare *layer = [[MagicSquare alloc] initWithLayer:[CALayer layer]];

    [self.view.layer addSublayer:layer];

}
4

1 回答 1

7

发现了问题。

我需要调用图层上的 setNeedsDisplay,因为它不会自动绘制自己:

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

    MagicSquare *layer = [[MagicSquare alloc] initWithLayer:[CALayer layer]];

    [self.view.layer addSublayer:layer];

    [layer setNeedsDisplay];
}
于 2012-09-01T23:46:49.470 回答