强制按比例/转换重绘UIView或CALayer

Gui*_*ume 2 scale calayer uiview drawrect ios

假设您有一个UIViewCALayer自己绘制(矢量)绘图,并且希望它保持任何大小的清晰,即使缩放视图或图层时也是如此。随transform属性缩放时如何重绘?是强制bounds更改而不使用的唯一方法transform吗?还是setNeedsDisplay每个步骤都打电话?

为什么UIImageView似乎表现出不同的行为(即,即使使用缩放transform并且其bounds不变,它似乎总是适当地缩放其源图像)?是因为这是直接设置content基础属性的唯一情况CALayer吗?

Jon*_*hon 5

如果needsDisplayOnBoundsChangeCALayer你的情况是不够的,你也可以继承CALayer和实现+ (BOOL)needsDisplayForKey:(NSString *)key方法。例:

+ (BOOL)needsDisplayForKey:(NSString *)key {
    if ([key isEqualToString:@"transform"]) {
        return YES;
    }
    return [super needsDisplayForKey:key];
}
Run Code Online (Sandbox Code Playgroud)

现在,每次transform属性更改时,都应重绘您的图层。如果您的绘图较大,则可能会导致动画中的性能问题。