我目前有一个关于 CALayer 子类的非常奇怪的错误。此 CALayer 子类负责绘制 UI 元素,并包含在自定义 UIView 类中。当 UIView 接收到触摸事件时,它会改变 UIElementLayer 的属性,从而导致图层被重绘。
但是,我遇到的奇怪问题是该层偶尔会冻结。当我说冻结时,我的意思是 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];
}