gpt4 book ai didi

iphone - UITableView 重复背景与 2 个图像

转载 作者:行者123 更新时间:2023-12-03 21:12:57 25 4
gpt4 key购买 nike

所以我试图制作一个具有重复背景的 UITableView。我希望背景与文本一起滚动。问题是背景是 2 张图像。有一个高度约为 550 像素的顶部图像,然后是一个高度为 2 像素的重复图像。我希望顶部图像随表格 View 滚动,然后最终离开顶部,然后片段图像只是重复。该 View 实际上位于 View Controller 中的 UITableView 下方。

这是我的背景绘图。当顶部的表格 View 滚动时,我调用 setNeedsDisplay。

-(void)drawRect:(CGRect) rect 
{

CGRect topRect = CGRectMake(0, _tableViewRect.origin.y, 320, min( max(0, CGImageGetHeight(top) - _tableViewRect.origin.y), _tableViewRect.size.height));
CGRect segmentRect = CGRectMake(0, topRect.size.height, 320, _tableViewRect.size.height - topRect.size.height);

if(topRect.size.height > 0)
{
CGImageRef newImageRef = CGImageCreateWithImageInRect(top, topRect);
UIImage *newImage = [UIImage imageWithCGImage:newImageRef];
[newImage drawAtPoint:CGPointMake(0,0)];
}

[[UIImage imageWithCGImage: segment] drawAsPatternInRect:segmentRect];
}

它可以工作,但在我的 3G 上非常卡顿。有谁有任何优化技巧或其他方法吗?

干杯

最佳答案

不要每次都创建一个新的镜像;缓存你的 UIImage,然后使用 CoreGraphics 调用重新定位你的 CGContextRef 以“指向”正确的区域,将图像复制到那里,然后继续。如果您要分析上面的代码,我想 CGImageCreateWithImageInRect() 占用了您的大部分周期。

您可能应该使用 contentOffset 来执行此操作,而不是使用 _tableViewRect 。另外,查看您的代码,虽然摆脱上面的内容会有所帮助,但我不确定这是否足够,因为您将重新绘制很多内容。也就是说,这是一个可能有效的代码片段:

//I'm not sure what _tableViewRect is, so let's just assume you've got
//some variable, tableScrollY, that represents the scroll offset of your table

CGContextRef context = UIGraphicsGetCurrentContext();

if (tableScrollY < top.size.height) { //okay, we need to draw at least PART of our image
CGContextSaveGState(context);
CGContextDrawImage(context, CGRectMake(0, -tableScrollY, top.size.width, top.size.height), top.CGImage);
}

这应该替换代码中间的 if(...) 部分。这尚未经过测试,因此您可能需要稍微修改一下。

关于iphone - UITableView 重复背景与 2 个图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1767695/

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