В конце концов это оказалось очевидным, мне нужно было выставить свойство CGColor
в моем CALayer и анимировать его вместо этого.
Edit:
Вот код для этого,используя UIViewCustomPropertyAnimation проект в качестве основы.
В OCLayer.h
добавьте новое свойство:
@property (nonatomic) CGColorRef myColor;
В OCLayer.m
добавьте директиву @dynamic:
@dynamic myColor;
И обновление isCustomAnimKey
:
+ (BOOL)isCustomAnimKey:(NSString *)key {
return [key isEqualToString:@"percent"] || [key isEqualToString:@"myColor"];
}
В OCView.h
добавить то же свойство, что и UIColor
.Это уже существовало в моем проекте, поэтому не требовало модификации, и это здорово, потому что он не нарушал никакого кода.
@property (nonatomic, strong) UIColor *progressColor;
Основные изменения будут в OCView.m
, так как геттер и сеттер должныконвертировать из CGColor
в UIColor
и обратно.
- (void)setMyColor:(UIColor *)color {
self.layer.myColor = color.CGColor;
}
- (UIColor*)myColor {
return [UIColor colorWithCGColor: self.layer.myColor];
}
Анимация теперь может выполняться как обычно:
[UIView animateWithDuration:1.f animations:^{
self.animView.myColor = [UIColor redColor];
}];