4

特定のアプリを開発するために Core Animation を学習しようとしていますが、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 に答える