推送到另一个视图控制器在iPhone中花费太多时间

时间:2013-12-23 10:32:15

标签: ios iphone objective-c gridview

我有一个应用程序,我最初打开来自webservice的图像网格。

我正在使用danieltull的DTGridView。

这些图像来自不同的类别,如自然,艺术,绘画等。

最初,当应用程序启动时,网格包含来自所有类别的图像。

主屏幕上有一个类别按钮,点击哪个用户将被推到另一个视图,其中提到了不同的类别,如自然,艺术,绘画等。

如果用户点击任何类别,他将再次引导图像网格,但仅包含来自所选类别的图像。

问题在于,当用户点击任何类别时,导航到网格视图需要花费太多时间。

当用户点击任何类别时,我从webservice获取数据。

我想在用户点击类别后立即将用户导航到Gridview,然后想要显示自定义Spinner。

选择我正在执行以下代码的类别并调用gridview的方法。

 if ([self isPad])
    {
         vc = [[ViewController alloc]initWithNibName:@"ViewController_iPad" bundle:nil];
    }
 [self.navigationController pushViewController:vc animated:NO];
[vc getCategoryNames];

请帮我解决这个问题。

**编辑**

- (NSInteger)numberOfRowsInGridView:(DTGridView *)gridView
{
    if (countimages % 4 == 0)
    {
        return countimages/4;
    }
    else
    {

        return countimages/4 + 1;

    }

}

- (NSInteger)numberOfColumnsInGridView:(DTGridView *)gridView forRowWithIndex:(NSInteger)index
{
    return 4;
}

- (CGFloat)gridView:(DTGridView *)gridView1 heightForRow:(NSInteger)rowIndex
{
    return gridView1.frame.size.height / 3;
    // return 300;
   // NSLog(@"%f",gridView1.frame.size.height/3);

}

- (CGFloat)gridView:(DTGridView *)gridView1 widthForCellAtRow:(NSInteger)rowIndex column:(NSInteger)columnIndex
{
    return gridView1.frame.size.width / 4;
    //return 300;
  //  NSLog(@"%f",gridView1.frame.size.width/4);
}

- (DTGridViewCell *)gridView:(DTGridView *)gv viewForRow:(NSInteger)rowIndex column:(NSInteger)columnIndex {

    DTGridViewCell *cell = [gv dequeueReusableCellWithIdentifier:@"cell"];

    if (!cell) {
        cell = [[DTGridViewCell alloc] initWithReuseIdentifier:@"cell"];
  UIView* v=[[UIView alloc]init];
    v.frame=CGRectMake(0, 0, gridView.frame.size.width / 4, gridView.frame.size.height / 3);
    [cell addSubview:v];

    imgeIndex = 0;
    imgeIndex = (rowIndex * 4) + columnIndex;

    UIButton *btn = [[UIButton alloc]initWithFrame:CGRectMake(0, 0, gridView.frame.size.width / 4, gridView.frame.size.height / 3)];
    [btn setTag:imgeIndex+1];
    [btn addTarget:self action:@selector(btnPressed:) forControlEvents:UIControlEventTouchUpInside];
    btn.contentMode = UIViewContentModeScaleAspectFit;
 if ([arr_imgurl count] <= imgeIndex)
        {
            btn.imageView.image=[UIImage imageNamed:@"logo_256.png"];
            return cell;
        }
        else
        {
            //NSLog(@"arr %d",[arr_imgurl count]);
            // NSLog(@"imgindex %d",imgeIndex);
            // NSLog(@"array %@",arr_imgurl);
            NSURL *url = [NSURL URLWithString:[arr_imgurl objectAtIndex:imgeIndex]];
            //NSLog(@"%@",url);
            [btn setImageWithURL:url placeholderImage:[UIImage imageNamed:@"logo_256.png"]];


        }
 btn.titleLabel.textColor = [UIColor whiteColor];

    [v addSubview:btn];
    [database close];

    return cell;
}

这里arr_imgurl包含来自webservice的图像路径。

2 个答案:

答案 0 :(得分:2)

虽然导航从不调用Web服务(原因:它将保持导航,直到它收到完整信息,我们无法始终确定服务器速度)。所以更好的导航然后调用线程和平均值的服务,同时显示屏幕上有活动指示器,以便用户认为应用程序正在加载图像。(确保图像懒得加载,因为用户没有耐心等待所有图像加载) 。如果你需要一个样本,我会对它进行编码并给你。

答案 1 :(得分:1)

大多数机会是在新视图控制器中加载网格的所有数据需要时间 这种“不正确”的数据加载有很多不同的场景。

可能是主线程中同步加载的Web服务 它可能是在主线程中同步加载(在网格代理中)的图像 等

请发布一些网格数据启动和网格委托的代码,以便更好地了解确切的问题。