Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 使单元格大小的图像平滑滚动的UITableView 这里写的所有东西实际上都是正确的_Objective C_Uitableview_Graphics_Opengl Es_Uiimage - Fatal编程技术网

Objective c 使单元格大小的图像平滑滚动的UITableView 这里写的所有东西实际上都是正确的

Objective c 使单元格大小的图像平滑滚动的UITableView 这里写的所有东西实际上都是正确的,objective-c,uitableview,graphics,opengl-es,uiimage,Objective C,Uitableview,Graphics,Opengl Es,Uiimage,方法用法除外 实施 我使用的模型是一个自定义的UITableViewCell,其中一个自定义的UIView设置为单元格的背景视图 自定义UIView包含两个单元格大小的图像(320x80 px),其中一个对视图的一半是100%透明的。所有元素都设置为不透明,并具有1.0α属性 我不重用单元格,因为我无法让它们加载不同的图像。电池可一个接一个重复使用,总共可重复使用9个电池。因此,我的内存中有9个可重复使用的单元。 单元格initWithStyle:reuseIdentifier方法部分:

方法用法除外


实施 我使用的模型是一个自定义的
UITableViewCell
,其中一个自定义的
UIView
设置为单元格的
背景视图

自定义
UIView
包含两个单元格大小的图像(320x80 px),其中一个对视图的一半是100%透明的。所有元素都设置为不透明,并具有1.0α属性

我不重用单元格,因为我无法让它们加载不同的图像。电池可一个接一个重复使用,总共可重复使用9个电池。因此,我的内存中有9个可重复使用的单元。

单元格
initWithStyle:reuseIdentifier
方法部分:

    CGRect viewFrame = CGRectMake(0.0f, 0.0f, 320.0f, 80.0f);
    customCellView = [[CustomCellView alloc] initWithFrame:viewFrame];
    customCellView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
    [self setBackgroundView:customCellView];
CustomCellView的初始化方法:

- (id)initWithFrame:(CGRect)frame {
    if ((self = [super initWithFrame:frame])) {
        self.opaque = YES;
        self.backgroundColor = [UIColor UICustomColor];
    }
    return self;
}
正在使用UIImage的
ImageName:
方法将图像作为UIImage对象从PNG文件预加载到NSMutableArray

它们是在UITableViewDelegate的方法
tableView:cellForRowAtIndexPath:
中设置的,并通过UITableViewCell和自定义方法传递给UIView

然后在UIView的
drawRect:
overrided方法中绘制:

- (void)drawRect:(CGRect)rect {
    CGRect contentRect = self.bounds; 
    if (!self.editing) {
        CGFloat boundsX = contentRect.origin.x;
        CGFloat boundsY = contentRect.origin.y;
        CGPoint point;
        point = CGPointMake(boundsX, boundsY);
        if (firstImage)  { [firstImage  drawInRect:contentRect blendMode:kCGBlendModeNormal alpha:1.0f]; }
        if (secondImage) { [secondImage drawInRect:contentRect blendMode:kCGBlendModeNormal alpha:1.0f]; }
    }
}

正如您所看到的,正在使用
drawInRect:blendMode:alpha:
方法绘制图像

问题 UtableView根本无法滚动,它在每个单元格上都会被点击,它又粗又令人毛骨悚然

思想
深入挖掘示例代码、stackoverflow和论坛让我想到了使用OpenGL ES预渲染图像,但实际上,平滑滚动有那么难吗?

仅使用UIImageView有什么问题?他们还不够快吗?(如果您正在预加载UIImages,它们应该是)


需要注意的一点是,[UIImage ImageName:]不会显式地将图像数据加载到内存中。它将为您提供一个由磁盘上的数据支持的引用。您可以通过拨打[yourImage CGImage]来解决此问题。

仅使用UIImageView有什么问题?他们还不够快吗?(如果您正在预加载UIImages,它们应该是)


需要注意的一点是,[UIImage ImageName:]不会显式地将图像数据加载到内存中。它将为您提供一个由磁盘上的数据支持的引用。你可以通过打电话给[yourImage CGImage]来解决这个问题。

这里没有明显的错误,但我同意这种方法不应该太慢。你不需要德国劳埃德船级社来做这件事。你是如何加载图像的?绘制图像时是否缩放图像(例如,图像是否本机大于最终大小)?否,图像是单元格的精确大小。如果我在drawRect:方法中禁用图像绘制,则单元格平滑且性感。他们肯定出了问题。试着运行shark,或者仪器中的新时间分析器。这将告诉你哪些方法占用的时间最多。这里没有明显的错误,但我同意这种方法不应该慢得令人痛苦。你不需要德国劳埃德船级社来做这件事。你是如何加载图像的?绘制图像时是否缩放图像(例如,图像是否本机大于最终大小)?否,图像是单元格的精确大小。如果我在drawRect:方法中禁用图像绘制,则单元格平滑且性感。他们肯定出了问题。试着运行shark,或者仪器中的新时间分析器。这将告诉您哪些方法占用的时间最多。