gpt4 book ai didi

objective-c - -(无效)drawRect :(CGRect)rect; is using up nearly all of iPhone CPU

转载 作者:行者123 更新时间:2023-12-01 18:27:02 25 4
gpt4 key购买 nike

- (void)drawRect:(CGRect)rect{

float sliceSize = rect.size.width / imagesShownAtOnce;
//Apply our clipping region and fill it with black
[clippingRegion addClip];
[clippingRegion fill];

//Draw the 3 images (+1 for inbetween), with our scroll amount.
CGPoint loc;
for (int i=0;i<imagesShownAtOnce+1;i++){
loc = CGPointMake(rect.origin.x+(i*sliceSize)-imageScroll, rect.origin.y);
[[buttonImages objectAtIndex:i] drawAtPoint:loc];
}

//Draw the text region background
[[UIColor blackColor] setFill];
[textRegion fillWithBlendMode:kCGBlendModeNormal alpha:0.4f];

//Draw the actual text.
CGRect textRectangle = CGRectMake(rect.origin.x+16,rect.origin.y+rect.size.height*4/5.6,rect.size.width/1.5,rect.size.height/3);
[[UIColor whiteColor] setFill];
[buttonText drawInRect:textRectangle withFont:[UIFont fontWithName:@"Avenir-HeavyOblique" size:22]];
}
clippingRegiontextRegionUIBezierPaths给我我想要的圆角矩形(第一个是剪切区域,第二个是我的文本的覆盖)

中间部分是绘制 3 张图像并让它们滚动,我从 CADisplayLink 每 2 次刷新更新一次, 并通过调用 [self setNeedsDisplay] 使绘制区域无效,并且还增加了我的 imageScroll 变量。

现在已经完成了背景信息,这是我的问题:

它运行,甚至运行平稳。但它消耗了绝对大量的 CPU 时间(80%+)!!我如何将它推到手机上的 GPU 上?有人告诉我 CALayers,但我以前从未处理过它们

最佳答案

将绘图的每个组件绘制一次( View 或图层)并让它保存缓存的绘图。然后你只需移动或变换每个组件,正如你所说,这一切都是由 GPU 完成的。

您可以使用单个 View 或单个层来执行此操作,但这并不重要( View 是一个层,在引擎盖下)。关键是当你真正想要的只是移动相同的持久部分时,没有必要不断地从头开始重新绘制。

学习 CALayer 是个好主意,因为它实际上是 iOS 上所有绘图的基础。还有什么比这更重要的呢?

关于objective-c - -(无效)drawRect :(CGRect)rect; is using up nearly all of iPhone CPU,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12614331/

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