ios - 在缩放/变换时强制重绘 UIView 或 CALayer

标签 ios uiview scale calayer drawrect

假设您有一个UIView 或一个CALayer 可以进行自己的(矢量)绘图,并且您希望它在任何尺寸下都保持清晰,即使在缩放 View 时也是如此或层。当使用 transform 属性缩放时,如何让它重绘?强制更改 bounds 而不是使用 transform 的唯一方法是什么?或者在每一步都调用 setNeedsDisplay

为什么 UIImageView 的行为似乎有所不同(即它似乎总是适本地缩放其源图像,即使使用 transformbounds 不变)?是因为它是唯一直接设置底层 CALayercontent 属性的情况吗?

最佳答案

如果 CALayer 上的 needsDisplayOnBoundsChange 在您的情况下还不够,您可以子类化 CALayer 并实现 + (BOOL)需要DisplayForKey:(NSString *)key 方法。示例:

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

现在,每次 transform 属性更改时,您的图层都应该重新绘制。如果您的绘图范围很广,这可能会导致动画出现性能问题。

关于ios - 在缩放/变换时强制重绘 UIView 或 CALayer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16670829/

相关文章:

ios - 如何确定View的背景颜色?

iOS OpenGL 问题

iphone - 减少 iPhone 上的核心显卡内存消耗

Java Swing JScrollPane 不滚动/缩放

ios - 如何使用 theos 链接 IOKit?

android - IOS 中的动画延迟无法正常工作

ios - 如何 initWithNib 派生子类

ios - 在 UITableViewCell 中的 UITextView 上使用 CAGradientLayer

ios - 如何使旧的OpenGL ES 1设置适应iPhone 6 Plus?

css - 如何只在x正方向上缩放?