2012-06-19 2 views
0

커스텀 레이어가 필요합니다 (새로운 변수와 메소드로 확장되었습니다).커스텀 CALayer는 셀렉터에 반응하지 않습니다

- [의 CALayer drawHourCircleWithDayLightStart : dayLightEnd : 애니메이션 :] : 문제는 계층 내 방법에 응답하지 것입니다 인식 할 수없는 선택기 인스턴스로 전송이 0x6a6d560 **

그것은 것 같아 내 사용자 정의 레이어는 HourCircleLayer로 처리되지 않고 CALayer로 처리됩니다. 하지만 여기서 변경해야합니까?

내 구현은 다음과 같습니다

@interface HourCircleLayer : CALayer 
    @property (strong) UIColor *dayColor; // default yellowColor 
    @property (strong) UIColor *nightColor; // default blueColor 
    + (id)layer; 
    - (void)drawHourCircleWithDayLightStart:(NSDate *)startDate dayLightEnd:(NSDate *)endDate animated:(BOOL)animated; 
@end 

@implementation HourCircleLayer 
    + (id)layer 
    { 
    id layer = [CALayer layer]; 
    [layer setValue:[UIColor yellowColor] forKey:kDayPortionColorKey]; 
    [layer setValue:[UIColor blueColor] forKey:kNightPortionColorKey]; 

    return layer; 
    } 

    - (void)drawHourCircleWithDayLightStart:(NSDate *)startDate dayLightEnd:(NSDate *)endDate animated:(BOOL)animated 
    { 
    self.withAnimation = animated; 
    [self setDayLightStart:[self hourAngleForDate:startDate]]; 
    [self setDayLightEnd:[self hourAngleForDate:endDate]]; 
    } 

@end 

답변

1

이 당신의 HourCircleLayer 당신이 CALayer를 초기화하기 때문이다,하지만. 당신의 + (id)layer 방법 변경 : 당신이 그래, 내가 한 이미이

HourCircleLayer *hourCircleLayer = [[HourCircleLayer alloc] init]; 
[hourCircleLayer drawHourCircleWithDayLightStart:dayLightEnd:animated:]; 
+0

같이해야하므로

id layer = [CALayer layer]; 

HourCircleLayer layer = [[HourCircleLayer alloc] init]; ... return [layer autorelease]; //Use autorelease if not using ARC 

1

두 번째 방법은 클래스의 방법이 아닙니다. 시암이 나를 올바른 길로 인도했습니다. ARC를 사용할 때 autorelease가 없어도됩니다.
+0

작품 - 고마워요. 그것은 또한 + (id) 레이어로 그것을하기 위해 트랙에 나를 데려왔다. –

관련 문제