Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.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
Iphone UIScrollView绘制视图的未使用部分_Iphone_Objective C_Cocoa Touch - Fatal编程技术网

Iphone UIScrollView绘制视图的未使用部分

Iphone UIScrollView绘制视图的未使用部分,iphone,objective-c,cocoa-touch,Iphone,Objective C,Cocoa Touch,我有一个带有自定义内容视图的UIScrollView,它使用drawRect显示其内容 在我的drawRect方法中,我尊重传递的CGRect参数,只绘制所需的内容 然而,每次调用drawRect时,它都会被传递到视图的整个边界,即使它是几千像素,我担心性能和内存使用。有没有办法让UIScrollView限制这一点,或者我是不是什么都不担心 此外,我还尝试使用CATiledLayer作为层,虽然这纠正了传递的rect,但感觉好像我误用了该类。而且,视图仍然尽可能地保留所有像素。(即使它没有立即绘

我有一个带有自定义内容视图的UIScrollView,它使用drawRect显示其内容

在我的drawRect方法中,我尊重传递的CGRect参数,只绘制所需的内容

然而,每次调用drawRect时,它都会被传递到视图的整个边界,即使它是几千像素,我担心性能和内存使用。有没有办法让UIScrollView限制这一点,或者我是不是什么都不担心


此外,我还尝试使用CATiledLayer作为层,虽然这纠正了传递的rect,但感觉好像我误用了该类。而且,视图仍然尽可能地保留所有像素。(即使它没有立即绘制其中一些图形)

使用CATiledLayer可能是最好的选择。我对CATiledLayer这个概念很熟悉,但我自己从未使用过,所以我不打算对此发表任何看法。我能说的是,如果您将UIScrollView子类化并实现

layoutSubviews
只要使用以下方法实现构造,就应该能够以良好的性能免费重画子视图

CGRectIntersectsRect()
在其中,您可以看到当前可见的rect

[self bounds]
与要绘制的对象的矩形相交。如果没有,您可以选择忽略该对象,甚至(如果它已经在scrollview上)将其从superview中删除。如果存在,则可以将对象放置在superview上


同样,CATiledLayer是一种更好的解决方案,但如果您觉得自己误用了它,请尝试我描述的方法。

1.内容视图比scrollview大

2.您可能应该认识到UiScrollViewDelegate的

      scrollViewDidScroll 

计算内容视图的rect,它应该被重新绘制,而不是整个边界。

我想我可以做到这一点。我需要将大视图分解为小视图,然后有一些重用它们的方法(就像UITableView那样)。我不想使用CATiledLayer的原因是它会自动在背景线程中包含绘图,这不是我想要的。