带有许多子视图的UIScrollView需要一些时间来处理

时间:2014-11-06 06:39:39

标签: ios objective-c xcode uiscrollview

我有UIScrollView个子视图。它包含产品/项目的结果列表。 UIView UIImageViewUILabel。它可能包含许多项目。我的问题是当我按下按钮(网格按钮)将UI结果更改为网格视图时,它需要一些时间才能完成处理。有没有办法让这更快?比如删除在屏幕/ UIScrollView中看不到的图像?

这是我的listView代码

-(void)actionList {

NSLog(@"List!!");
isGrid = NO;
for(UIView*iView in sv_results.subviews){
    for(UILabel *iView2 in iView.subviews){
        if([iView2 isMemberOfClass:[UILabel class]]){
            if(iView2.tag == 0)
            {
                iView2.frame = CGRectMake(80, 0, 150, 50);
                iView2.font = [UIFont boldSystemFontOfSize:12.0f];
            }
            else if(iView2.tag == 1)
            {
                pricewidth = [iView2.text sizeWithAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:13.0f]}];
                iView2.frame = CGRectMake(80, 20, pricewidth.width+1, 50);
                iView2.font = [UIFont systemFontOfSize:13.0f];
                for(UIView *discountline in iView2.subviews)
                {
                    discountline.frame = CGRectMake(0, iView2.frame.size.height/2, iView2.frame.size.width, 1);
                }
            }
            else if(iView2.tag == 2)
            {
                iView2.frame = CGRectMake(screenRect.size.width-60, 30, 50, 15);
                iView2.font = [UIFont systemFontOfSize:10.0f];
            }
            else if(iView2.tag == 3)
            {
                iView2.frame = CGRectMake(140, 20, 150, 50);
                iView2.font = [UIFont systemFontOfSize:13.0f];
            }
            else {
                iView2.frame = CGRectMake(80, 0, 150, 50);
                iView2.font = [UIFont boldSystemFontOfSize:12.0f];
            }
        }
        if([iView2 isMemberOfClass:[AsyncImageView class]]){
            iView2.frame = CGRectMake(15,12,50,50);
            iView2.layer.cornerRadius = 5;
        }
    }


    for(int i = 0;i<=allAvailableData;i++)
    {
        if(iView.tag == i)
        {
            iView.frame = CGRectMake(0,((i-1)*75),320,75);
        }
        //sv_results.contentSize = CGSizeMake(320,yPosition);//optional resize height scrollview from gridview
    }


    iView.layer.borderWidth = .3f;
}
sv_results.contentSize = CGSizeMake(320,(allAvailableData)*75);
}

3 个答案:

答案 0 :(得分:1)

由于图像可能需要一些时间。如果您在主线程中加载大量图像,那么花一些时间是正常的。尝试使用UITableView加载延迟图像。我在我的项目中使用它,易于实现和使用。 http://www.theappguruz.com/sample-code/ios-lazy-loading-images/有一些代码和帮助。我没有检查这个,但它看起来也很好https://developer.apple.com/library/ios/samplecode/LazyTableImages/Introduction/Intro.html

答案 1 :(得分:0)

只需使用

scrollView.delaysContentTouches = NO;  

一个布尔值,用于确定滚动视图是否延迟处理触摸手势。
如果此属性的值为YES,则滚动视图会延迟处理触摸手势,直到它可以确定滚动是否为意图。如果值为NO,则滚动视图立即调用touchesShouldBegin:withEvent:inContentView:。默认值为YES。

这意味着,默认情况下,scrollView会延迟触摸,您可以通过上面的代码禁用该功能,
希望它能解决你的问题。

答案 2 :(得分:0)

我认为您应该实施 UITableView ,并且可以使用“ dispatch_async ”加载图片,这样就不会花费时间。我希望你能以这种方式得到解决方案。