2014-10-24 6 views
0

사용자 지정 속성을 애니메이션화하려고하고 있는데 여러 소스에서 보았을 때이 방법이 될 것 같지만 뭔가 빠졌습니다.사용자 지정 속성 애니메이션

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    // Instantiate the navigation line view 
    CGRect navLineFrame = CGRectMake(0.0f, 120.0f, self.view.frame.size.width, 15.0f); 
    self.navigationLineView = [[HyNavigationLineView alloc] initWithFrame:navLineFrame]; 

    // Make it's background transparent 
    self.navigationLineView.backgroundColor = [UIColor colorWithWhite:0.0f alpha:0.0f]; 
    self.navigationLineView.opaque = NO; 

    [[self.navigationLineView layer] addSublayer:[[HyNavigationLineLayer alloc] init]]; 
    [self.view addSubview:self.navigationLineView]; 
} 

것은이 : 내보기 컨트롤러에 마지막으로

@implementation HyNavigationLineView 

+ (Class)layerClass 
{ 
    return [HyNavigationLineLayer class]; 
} 

@end 

그리고 :이 내 시야에있는 유일한 관련 방법이라고 생각

@implementation HyNavigationLineLayer 

@dynamic offset; 

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

    if (self) { 

     HyNavigationLineLayer * other = (HyNavigationLineLayer*)layer; 
     self.offset = other.offset; 
    } 

    return self; 
} 

-(CABasicAnimation *)makeAnimationForKey:(NSString *)key 
{ 
    // TODO 
    return nil; 
} 

- (id<CAAction>)actionForKey:(NSString *)event 
{ 
    if ([event isEqualToString:@"offset"]) { 
     return [self makeAnimationForKey:event]; 
    } 

    return [super actionForKey:event]; 
} 

+ (BOOL)needsDisplayForKey:(NSString *)key 
{ 
    if ([key isEqualToString:@"offset"]) { 
     return YES; 
    } 

    return [super needsDisplayForKey:key]; 
} 

- (void)drawInContext:(CGContextRef)ctx 
{ 
    NSLog(@"Never gets called"); 
} 

@end 

: 여기에 CALayer 하위 클래스 layerClass이 있지만 drawInContext 메서드는 전혀 호출되지 않습니다. 레이어를 그릴 무언가를 놓치고 있습니까?

답변

0

해결되었습니다. 전화해야합니다 setNeedsDisplay

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    // Instantiate the navigation line view 
    CGRect navLineFrame = CGRectMake(0.0f, 120.0f, self.view.frame.size.width, 15.0f); 
    self.navigationLineView = [[HyNavigationLineView alloc] initWithFrame:navLineFrame]; 

    // Make it's background transparent 
    self.navigationLineView.backgroundColor = [UIColor colorWithWhite:0.0f alpha:0.0f]; 
    self.navigationLineView.opaque = NO; 

    [[self.navigationLineView layer] addSublayer:[[HyNavigationLineLayer alloc] init]]; 
    [self.view addSubview:self.navigationLineView]; 
    [self.navigationLineView.layer setNeedsDisplay]; 
}