gpt4 book ai didi

iphone - CALayer 与 drawInRect : performance?

转载 作者:搜寻专家 更新时间:2023-10-30 20:21:50 24 4
gpt4 key购买 nike

我正在尝试在矩形中绘制一些阴影。阴影图像本身约为 1px * 26px。

下面是我想到的两种在 View 中绘制图像的方法:

//These methods are called in drawRect:

/* Method 1 */
[self.upperShadow drawInRect:rectHigh]; //upperShadow is UIImage
[self.lowerShadow drawInRect:rectLow];


/* Method 2 */
CALayer *shadowTop = [CALayer layer];
shadowTop.frame = rectHigh;
shadowTop.contents = (__bridge id)topShadow; //topShadow is CGImage
[self.layer addSublayer:shadowTop];
CALayer *shadowLow = [CALayer layer];
shadowLow.frame = rectLow;
shadowLow.contents = (__bridge id)lowShadow;
[self.layer addSublayer:shadowLow];

/* Method 3 */
UIImageView *tShadow = [[UIImageView alloc] initWithFrame:rectHigh];
UIImageView *bShadow = [[UIImageView alloc] initWithFrame:rectLow];
tShadow.image = self.upperShadow;
bShadow.image = self.lowerShadow;
tShadow.contentMode = UIViewContentModeScaleToFill;
bShadow.contentMode = UIViewContentModeScaleToFill;
[self addSubview:tShadow];
[self addSubview:bShadow];

我很好奇,在绘图和动画性能方面,哪一个更好。从我的基准测试来看,图层的绘制速度似乎更快。以下是一些基准测试统计数据:

drawInRect: took 0.00054 secs 
CALayers took 0.00006 secs
UIImageView took 0.00017 secs

包含这些阴影的 View 将在其上方有一个将被动画化的 View ( View 本身不是)。任何会降低动画性能的事情都应该避免。这三种方法之间有什么想法吗?

最佳答案

如果阴影是静态的,那么最好的方法是使用两个 UIImageView秒。它甚至比 CALayer 更聪明关于如何处理静态图像(虽然我不知道这是否会有所不同),否则将具有与 CALayer 相同的好处,例如在 GPU 而不是 CPU 上完成所有合成(如您的方法 2 所要求的那样)。

关于iphone - CALayer 与 drawInRect : performance?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8767460/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com