>

Viewcontroller B의 버튼 클릭으로 이미지를 가져 오려고합니다. 이미지가 응답으로 수신 된 후 이미지 URL을 사용하여 viewcontroller에서 이미지 뷰를 채 웁니다. 그러나 채워지기에는 너무 오래 걸리고 화면이 멈추지 않고 화면을 부드럽게 스크롤하고 응답을 조금 일찍 얻을 수있는 방법이 있습니까?


  • 답변 # 1

    이미지 검색에 디스패치 비동기를 사용하십시오. 즉, 메인 큐에서 수행하지 마십시오.

    애플 독 : https://developer.apple.com/documentation/dispatch/1453057-dispatch_async

  • 답변 # 2

    이 줄은 기본 대기열에 없어야합니다

     NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:[[responseArr objectAtIndex:indexPath.row]valueForKey:@"CategoryImage"]]];
    
    

    이와 같이 변경 될 수 있습니다

     NSString *getImagePath = [documentsPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.jpeg",n1.Id]];
        if([[NSFileManager defaultManager] fileExistsAtPath:getImagePath])
        {
            UIImage *img = [UIImage imageWithContentsOfFile:getImagePath];
            cell.leftImageV.image =img;
            [cell.activity stopAnimating];
            cell.activity.hidden=YES;
        }
        else
        {
            [cell.activity startAnimating];
             cell.activity.hidden=NO;
            cell.leftImageV.image = nil;
            NSLog(@"xdasdxsadxa %@",n1.mainImgStr);
            dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
            dispatch_async(concurrentQueue, ^{
                __block NSData * imageData  = nil;
                dispatch_sync(concurrentQueue, ^{ 
                    imageData = [[NSData alloc] initWithContentsOfURL: [NSURL URLWithString:n1.mainImgStr]];
                    //Add the file name
                    [imageData writeToFile:getImagePath atomically:YES]; //Write the file
                });
                dispatch_sync(dispatch_get_main_queue(), ^{
                    if(imageData)
                    { 
                        [self.collectionView reloadData];
                    } 
                });
            }); 
        }
    
    

  • 이전 javascript - Ajax를 통해 제출할 때 날짜 시간 형식화 오류
  • 다음 Angular 4에서 Bootstrap 40"Modal"이 작동하지 않습니다