Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.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
Xcode UITableView滚动问题_Xcode_Image_Uitableview_Scroll - Fatal编程技术网

Xcode UITableView滚动问题

Xcode UITableView滚动问题,xcode,image,uitableview,scroll,Xcode,Image,Uitableview,Scroll,在我的应用程序中,我使用表格视图来显示图像。我一行显示4幅图像。我能够很好地显示图像。但我的问题是,当我滚动表格视图来查看图像时,滚动速度非常慢,而且会卡在中间。原因可能是什么。我在这里发布我的部分代码,请帮忙 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { NSLog([NSString stringWithFormat:@" numberOfRows

在我的应用程序中,我使用表格视图来显示图像。我一行显示4幅图像。我能够很好地显示图像。但我的问题是,当我滚动表格视图来查看图像时,滚动速度非常慢,而且会卡在中间。原因可能是什么。我在这里发布我的部分代码,请帮忙

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    NSLog([NSString stringWithFormat:@" numberOfRowsInSection :%d",(int)ceil([wordsInSentence count]/4.0)]);
    buttonIndex=1;

    return (int)ceil([wordsInSentence count]/4.0);
}


// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    if (cell!=nil) {
      cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
      //return cell;

    }
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }

    for (int i=0; i < 4; i++) {
      UIImageView *importMediaSaveImage;
      NSString *name1;
      NSString *name2;
      NSString *name3;
      NSString *name4;

      switch (i) {

       case 0:
        importMediaSaveImage = [[[UIImageView alloc] initWithFrame:CGRectMake(25+90*(i%4), 6, 85, 125)] autorelease] ;
        if([wordsInSentence count]>((indexPath.row * 4)+ 0)){

           name1= [wordsInSentence objectAtIndex:((indexPath.row * 4)+ 0)]; 

           importMediaSaveImage.image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:name1 ofType:@"png" inDirectory:@"Images"]];
           buttonIndex=((indexPath.row * 4)+ 0)+1;
           [self showImage:importMediaSaveImage];
           [imageViewArray addObject:importMediaSaveImage];
           [cell.contentView addSubview:importMediaSaveImage];  
           [imageCollection addObject:importMediaSaveImage];
           NSLog(name1);
        } else {
           importMediaSaveImage.image=[UIImage imageNamed:@"White.png"];
           //importMediaSaveImage.image = nil;
           [cell.contentView setHidden:YES];
        }

        break;

      case 1:
        importMediaSaveImage = [[[UIImageView alloc] initWithFrame:CGRectMake(25+90*(i%4), 6, 85, 125)] autorelease] ;
        if([wordsInSentence count]>((indexPath.row * 4)+ 1)){
          name2 = [wordsInSentence objectAtIndex:((indexPath.row * 4)+ 1)];     
          NSLog(name2);
          importMediaSaveImage.image  = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:name2 ofType:@"png" inDirectory:@"Images"]];
          [cell.contentView addSubview:importMediaSaveImage];
          buttonIndex=((indexPath.row * 4)+ 1)+1;
          [self showImage:importMediaSaveImage];
          [imageViewArray addObject:importMediaSaveImage];
          [imageCollection addObject:importMediaSaveImage];
        } else {
          importMediaSaveImage.image=[UIImage imageNamed:@"White.png"];
          //importMediaSaveImage.image = nil;
          [cell.contentView addSubview:importMediaSaveImage];
        }
     break;

    case 2:
        importMediaSaveImage = [[[UIImageView alloc] initWithFrame:CGRectMake(25+90*(i%4), 6, 85, 125)] autorelease] ;
        if([wordsInSentence count]>((indexPath.row * 4)+ 2)){
          name3 = [wordsInSentence objectAtIndex:((indexPath.row * 4)+ 2)]; 
          NSLog(name3);
          importMediaSaveImage.image  = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:name3 ofType:@"png" inDirectory:@"Images"]];
          [cell.contentView addSubview:importMediaSaveImage];
          buttonIndex=((indexPath.row * 4)+ 2)+1;
          [self showImage:importMediaSaveImage];
          [imageViewArray addObject:importMediaSaveImage];
          [imageCollection addObject:importMediaSaveImage];
        } else {
          importMediaSaveImage.image=[UIImage imageNamed:@"White.png"];
          //importMediaSaveImage.image = nil;
          [cell.contentView addSubview:importMediaSaveImage];
        }
        break;

    case 3:
        importMediaSaveImage = [[[UIImageView alloc] initWithFrame:CGRectMake(25+90*(i%4), 6, 85, 125)] autorelease] ;
        if([wordsInSentence count]>((indexPath.row * 4)+ 3)){
          [cell.contentView addSubview:importMediaSaveImage];   
          name4 = [wordsInSentence objectAtIndex:((indexPath.row * 4)+ 3)];
          NSLog(name4);
          importMediaSaveImage.image  = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:name4 ofType:@"png" inDirectory:@"Images"]];
          buttonIndex=((indexPath.row * 4)+ 3)+1;
          [self showImage:importMediaSaveImage];
          [imageViewArray addObject:importMediaSaveImage];
          [imageCollection addObject:importMediaSaveImage];
        } else {
          importMediaSaveImage.image=[UIImage imageNamed:@"White.png"];
          //importMediaSaveImage.image = nil;
          [cell.contentView addSubview:importMediaSaveImage];
        }
        break;

    } //switch end
  } //for loop end

  return cell;
}
-(NSInteger)表视图:(UITableView*)表视图行数节:(NSInteger)节{
NSLog([NSString stringWithFormat:@“numberofrowsinssection:%d”,(int)ceil([words句子计数]/4.0)];
按钮指数=1;
返回(int)ceil([words语句计数]/4.0);
}
//自定义表格视图单元格的外观。
-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath{
静态NSString*CellIdentifier=@“Cell”;
UITableViewCell*单元格=[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
如果(单元格!=nil){
cell=[[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault重用标识符:CellIdentifier]自动释放];
//返回单元;
}
如果(单元格==nil){
cell=[[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault重用标识符:CellIdentifier]自动释放];
}
对于(int i=0;i<4;i++){
UIImageView*导入媒体视频图像;
NSString*name1;
NSString*name2;
NSString*name3;
NSString*name4;
开关(一){
案例0:
IMPORTMEDIASAVIMAGE=[[UIImageView alloc]initWithFrame:CGRectMake(25+90*(i%4),6,85,125)]自动释放];
如果([WordsInSession count]>((indexPath.row*4)+0)){
name1=[wordsInstanceObjectAtIndex:((indexath.row*4)+0)];
IMPORTMEDIASAVIMAGE.image=[UIImage IMAGEWITH CONTENTS OFFILE:[[NSBundle mainBundle]路径资源:类型名称1:@“png”目录:@“Images”];
buttonIndex=((indexath.row*4)+0)+1;
[自显示图像:导入MediaSaveImage];
[imageViewArray addObject:importMediaSaveImage];
[cell.contentView addSubview:importMediaSaveImage];
[imageCollection addObject:importMediaSaveImage];
NSLog(名称1);
}否则{
IMPORTMEDIASAVIMAGE.image=[UIImage IMAGENAME:@“White.png”];
//importMediaSaveImage.image=nil;
[cell.contentView setHidden:是];
}
打破
案例1:
IMPORTMEDIASAVIMAGE=[[UIImageView alloc]initWithFrame:CGRectMake(25+90*(i%4),6,85,125)]自动释放];
如果([WordsInSession count]>((indexPath.row*4)+1)){
name2=[wordsInstanceObjectAtIndex:((indexath.row*4)+1)];
NSLog(名称2);
IMPORTMEDIASAVIMAGE.image=[UIImage image WITH CONTENTS OFFILE:[[NSBundle mainBundle]路径资源:类型名称2:@“png”目录:@“Images”];
[cell.contentView addSubview:importMediaSaveImage];
buttonIndex=((indexath.row*4)+1)+1;
[自显示图像:导入MediaSaveImage];
[imageViewArray addObject:importMediaSaveImage];
[imageCollection addObject:importMediaSaveImage];
}否则{
IMPORTMEDIASAVIMAGE.image=[UIImage IMAGENAME:@“White.png”];
//importMediaSaveImage.image=nil;
[cell.contentView addSubview:importMediaSaveImage];
}
打破
案例2:
IMPORTMEDIASAVIMAGE=[[UIImageView alloc]initWithFrame:CGRectMake(25+90*(i%4),6,85,125)]自动释放];
if([wordsin句子计数]>((indexPath.row*4)+2)){
name3=[wordsInstanceObjectAtIndex:((indexath.row*4)+2)];
NSLog(name3);
IMPORTMEDIASAVIMAGE.image=[UIImage image WITH CONTENTS OFFILE:[[NSBundle mainBundle]路径资源:类型名称3:@“png”目录:@“Images”];
[cell.contentView addSubview:importMediaSaveImage];
buttonIndex=((indexath.row*4)+2)+1;
[自显示图像:导入MediaSaveImage];
[imageViewArray addObject:importMediaSaveImage];
[imageCollection addObject:importMediaSaveImage];
}否则{
IMPORTMEDIASAVIMAGE.image=[UIImage IMAGENAME:@“White.png”];
//importMediaSaveImage.image=nil;
[cell.contentView addSubview:importMediaSaveImage];
}
打破
案例3:
IMPORTMEDIASAVIMAGE=[[UIImageView alloc]initWithFrame:CGRectMake(25+90*(i%4),6,85,125)]自动释放];
如果([wordsInSession count]>((indexPath.row*4)+3)){
[cell.contentView addSubview:importMediaSaveImage];
name4=[wordsInstanceObjectAtIndex:((indexPath.row*4)+3)];
NSLog(名称4);
IMPORTMEDIASAVIMAGE.image=[UIImage image WITH CONTENTS OFFILE:[[NSBundle mainBundle]路径资源:类型名称4:@“png”目录:@“Images”];
buttonIndex=((indexath.row*4)+3)+1;
[自显示图像:导入MediaSaveImage];
[imageViewArray addObject:importMediaSaveImage];
[imageCollection addObject:importMediaSaveImage];
}否则{
IMPORTMEDIASAVIMAGE.image=[UIImage IMAGENAME:@“White.png”];
//importMediaSaveImage.image=nil;
[cell.contentView addSubview:importMediaSaveImage];
}
打破
}//开关端
}//用于循环结束
返回单元;
}

您遇到的最大问题是在-cellForRowAtIndexPath方法中进行所有渲染。这对于文本和快速迭代的数据很好,但是对于从web加载的图像或数据,效率非常低

请记住,对于屏幕上可见的每个单元格,此方法调用一次。所以,如果你有很多处理器密集型的东西,它会使滚动延迟或崩溃

你应该读一读这篇文章,作者是Tweetie fame的Loren Brichter。它解释了如何实现快速滚动出包含大量信息的tableview。对于iOS 4来说,它有点过时了,因为一些大都会