1

私は現在、CALayer サブクラスに関して非常に奇妙なバグを抱えています。この CALayer サブクラスは、UI 要素の描画を担当し、カスタム UIView クラス内に含まれています。UIView がタッチ イベントを受け取ると、UIElementLayer のプロパティが変更され、レイヤーが再描画されます。

ただし、私が抱えている奇妙な問題は、レイヤーが時々フリーズすることです。フリーズアップとは、次の分の最初の 1 秒まで drawInContext() が呼び出されないことを意味します。文字通り、フリーズするたびに、次の :00 コンポーネントで正常に戻ると期待できます。すべての機能をデバッグしようとしましたが、これが発生する理由がわかりません。これを引き起こしている可能性のあるアイデアはありますか?

そのクラスの詳細は次のとおりです。

@interface UIElementLayer : CALayer

@property (nonatomic) CGFloat beginningValue;
@property (nonatomic) CGFloat endingValue;
@property (nonatomic) BOOL shouldReset;
@end

@implementation UIElementLayer
@dynamic beginningValue, endingValue, shouldReset;

- (id)initWithLayer:(id)layer
{
    if (self = [super initWithLayer:layer])
    {
        if ([layer isKindOfClass:[UIElement class]])
        {
            UIElement *element = (UIElement *)layer;
            self.shouldReset = element.shouldReset;
            self.startingValue = element.startingValue;
            self.endingValue = element.endingValue;
        }
    }

    return self;
}

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

    return [super needsDisplayForKey:key];

}
4

0 に答える 0