layer的属性变化时,会调用actionForKey方法,如果这个方法返回一个animation对象,则此次属性变化引发一个动画。
看教程,可以通过这个方法实现自定义属性支持隐式动画。
于是猜想支持隐式动画的layer自有的属性也是通过这种方式来实现隐式动画的,
于是就有了下面的解决方法:
@interface MyLayer: CALayer
@end
@implementation ClockFace
//使cornerRadius的隐式动画失效
- (id<CAAction>)actionForKey:(NSString *)key
{
NSLog(@"actionForKey:%@",key);
if([key isEqualToString:@"cornerRadius"]){
return nil;
}
return [super actionForKey:key];
}
@end