我有一个应用程序,我最初打开来自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的图像路径。
答案 0 :(得分:2)
虽然导航从不调用Web服务(原因:它将保持导航,直到它收到完整信息,我们无法始终确定服务器速度)。所以更好的导航然后调用线程和平均值的服务,同时显示屏幕上有活动指示器,以便用户认为应用程序正在加载图像。(确保图像懒得加载,因为用户没有耐心等待所有图像加载) 。如果你需要一个样本,我会对它进行编码并给你。
答案 1 :(得分:1)
大多数机会是在新视图控制器中加载网格的所有数据需要时间 这种“不正确”的数据加载有很多不同的场景。
可能是主线程中同步加载的Web服务 它可能是在主线程中同步加载(在网格代理中)的图像 等
请发布一些网格数据启动和网格委托的代码,以便更好地了解确切的问题。