为什么UIView drawRect导致UIScrollview的第一次传递变得不稳定/不稳定/慢?

时间:2013-08-16 07:13:40

标签: iphone ios caching uiscrollview uiimageview

编辑:看起来问题代码是在我在UIView中绘制的程序背景中,然后我将其添加为UIScrollView的子视图。程序代码如下。它绘制了盒子形状,看起来有点像天际线。任何想法为什么这会减慢我的UIScrollView的第一次传递?它有时可能多达一千像素宽或更多。见图像......

- (void)drawRect:(CGRect)rect
{
UIBezierPath *vertLine = [[UIBezierPath alloc] init];

[vertLine moveToPoint:CGPointMake(0,self.frame.size.height)];

int detail = 10;
int ranNum = 0;
int count = self.bounds.size.width/detail;
CGFloat heightIncrement = 0.0;

CGFloat minHeight = self.frame.size.height;

CGFloat xPos = 0;
CGFloat yPos = self.frame.size.height-20;

for (int i =0; i<count; i++)
{
    ranNum += (arc4random() % 9)-5;

    yPos -= (arc4random() % 30);
    [vertLine addLineToPoint:CGPointMake(xPos,yPos)];

    xPos += (arc4random() % 20)+10;
    [vertLine addLineToPoint:CGPointMake(xPos,yPos)];

    yPos += (arc4random() % 30);
    [vertLine addLineToPoint:CGPointMake(xPos,yPos)];

    xPos += (arc4random() % 30);
    [vertLine addLineToPoint:CGPointMake(xPos,yPos)];

    if (yPos>self.frame.size.height-10) {
        yPos = self.frame.size.height-10;
    }

    if (yPos<self.frame.size.height-50) {
        yPos = self.frame.size.height-50;
    }

}

[vertLine addLineToPoint:CGPointMake(count*20,(self.frame.size.height))];

[[UIColor colorWithRed:0.0/255.0 green:38.0/255.0 blue:51.0/255 alpha:1] setFill];

[vertLine fill];

}

Procedural background drawn in drawRect causing slow UIScrollView

<击> 我有一个生涩的滚动视图,但只在第一次通过。在滚动视图中查看完所有视图后,它非常流畅。

第一次传递:在第一次传递期间,当每个UIImageView进入视图时(从右到左)出现时,当它进入可见区域时会有一个混蛋。因此,如果您引用附加的图像,您将看到UIImageView 5从右向左进入。当发生这种情况时,会有一个小暂停,就像滚动视图告诉图像视图加载/准备在舞台上一样。我试图描述这个,但我没有看到我的代码有任何问题,我不知道如何分析我没有覆盖的方法等。所以一个子问题是......当UIScrollView进入可见区域时,在UviewcrollView的子视图上调用了哪些方法?

正如我所提到的,我试图做异步和其他并发方法,但似乎无论如何加载图像,第一遍总是生涩,然后就像UIScrollView缓存子视图一样。是否有可能在前面进行缓存/加载... [scrollView cacheSubViews];我希望启动速度慢于第一次滚动时的笨重。

感谢您对此的任何想法或有关UIScrollView如何与其子视图一起使用的信息。我已经看到许多问题和一些关于生涩的UIScrollViews与UIImageViews作为子视图的解决方案。我尝试了很多,但仍然有一个慢的scrollview。 奥斯汀

1 个答案:

答案 0 :(得分:0)

imageWithContentsOfFile是一个需要很多tile的同步过程。使用一些异步方式加载图像并可以实现平滑