2013-03-09 17 views
3

我試圖通過子類化使用CALayer。我知道有些帖子關於我見過他們中的大多數,並且遵循瞭解決方案,但沒有成功。像設置幀大小。這是代碼。需要提前CAayer - (void)drawInContext:(CGContextRef)ctx永遠不會被調用

// 
// NewView.m 
// layerPractise 


#import "NewView.h" 
#import "QuartzCore/QuartzCore.h" 
#import "NewLayer.h" 
#import "NewLayer2.h" 

@interface NewView() { 
// NSMutableArray *_normalizedValues; 

} 
@end 

@implementation NewView 
@synthesize _containerLayer; 

@synthesize layer,shouldAddNewLayer; 

-(void)doInitialSetup { 
    self._containerLayer = [CALayer layer]; 
    [_containerLayer setFrame:self.frame]; 
    [self.layer addSublayer:self._containerLayer]; 
// [_containerLayer retain]; 
} 

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     [self doInitialSetup]; 
    } 

    return self; 
} 

-(id)initWithCoder:(NSCoder *)aDecoder { 
    if (self = [super initWithCoder:aDecoder]) { 
     [self doInitialSetup]; 
    } 

    return self; 
} 


- (void)addCustomLayer{ 



    NewLayer *newLayer = [NewLayer layer]; 

    newLayer.frame = self.bounds; 

    [_containerLayer addSublayer:newLayer]; 
    [newLayer setNeedsDisplay]; 


} 



// Only override drawRect: if you perform custom drawing. 
// An empty implementation adversely affects performance during animation. 

//- (void)drawRect:(CGRect)rect 
//{ 
// // Drawing code 
//} 


@end 

和NewLayer類

- (id)initWithLayer:(id)layer{ 

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

    } 

    return self; 
} 

- (id)init { 
    self = [super init]; 
    if (self) { 

     self.frame = CGRectMake(0, 0, 500, 500); 
     self.delegate = self; 
     CGRect r = self.frame; 
     [self setNeedsDisplay]; 
    } 

    return self; 
} 

+ (BOOL)needsDisplayForKey:(NSString *)key { 

    [super needsDisplayForKey:key]; 

} 

- (void)drawInContext:(CGContextRef)ctx{ 

    CGContextMoveToPoint(ctx, 100, 100); 
    CGContextAddLineToPoint(ctx, 500, 800); 
    CGContextSetStrokeColorWithColor(ctx, [UIColor blackColor].CGColor); 

    CGContextDrawPath(ctx, kCGPathStroke); 


} 

回答

3

addCustomLayer方法不會被調用一些幫助THX。在doInitialSetup中創建了一個圖層,但其類型爲CALayer,而不是您的自定義子類NewLayer

+0

哦,我必須睡覺.. thx爲它 – Azerue 2013-03-11 08:02:46

相關問題