0

カスタムレイヤー(新しい変数とメソッドで拡張)が必要で、以下のようにしました。問題は、レイヤーが私のメソッドに応答しないことです:

-[CALayer drawHourCircleWithDayLightStart:dayLightEnd:animated:]: 認識されないセレクターがインスタンス 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
4

2 に答える 2

1

これは、 を初期化するが、 を初期化CALayerしないためですHourCircleLayer+ (id)layerメソッドの変更で :

id layer = [CALayer layer];

HourCircleLayer layer = [[HourCircleLayer alloc] init];
...

return [layer autorelease]; //Use autorelease if not using ARC
于 2012-06-19T07:44:41.473 に答える
1

2 番目のメソッドはクラス メソッドではないため、次のようにする必要があります。

HourCircleLayer *hourCircleLayer = [[HourCircleLayer alloc] init];
[hourCircleLayer drawHourCircleWithDayLightStart:dayLightEnd:animated:];
于 2012-06-19T08:23:26.843 に答える