문제

짧은 시간에 표시하는 데 필요한 일련의 이미지가 있습니다 (PNG 시퀀스). 총 31 개의 PNG가 있으며 각각은 약 45KB입니다. 이미 다음 코드로로드했습니다.

imgArray = [[NSMutableArray alloc] init];
for(int i = 0; i <= 30; i++) {
    NSString * filename = [NSString stringWithFormat:@"img_000%.2d.png", i];
    UIImage *temp = [UIImage imageNamed:filename];
    [imgArray addObject:temp];
    [temp release];
    temp = nil;
} 

이미지를 표시하기 위해 다음 코드를 사용합니다.

CGImageRef image = [(UIImage *)[imgArray objectAtIndex:imgFrame] CGImage];
imgLayer.contents = (id)image;
if(imgFrame < 29) {
    imgFrame++;
} else {
    imgFrame = 0;
    imgLayer.hidden = TRUE;
    [imgTimer invalidate];
}

여기서 imglayer는 a CALayer. (Imgtimer는 간격이 0.03s 인 반복 타이머입니다)

그러나 나는 이미지를 부를 때 처음에는 매우 느린 것을 발견했습니다. 첫 번째 모양을 제외하고 다른 외관은 아무런 문제가 없습니다.

사전로드 이미지와 관련이 있습니까? 아니면 내 이미지가 파일 크기가 너무 큽니까?

도움이 되었습니까?

해결책

지연의 이유는 데이터를 프로파일 링하지 않고 말하기 어렵습니다. 그러나 여기에 도움이 될 수있는 트릭이 있습니다 : 모든 이미지를 하나의 큰 파일로 결합하십시오. 직사각형을 만들어보십시오 (아마도 6x6 또는 4*8). 그런 다음이 단일 파일을로드하고 각 이미지를 표시하기 위해 각 이미지를 자르십시오 (즉, 타일 크기의 디스플레이를위한 이미지를 만들고 다른 하나의 타일을 다른 쪽에서 디스플레이 이미지로 복사하십시오).

다른 팁

이미지는 사용 및 표시 될 때로드됩니다. 악기에서 Time Profiler를 사용하면 지연이 발생합니다. 그런 다음 해당 지연을 확대하고 원인이 무엇인지 살펴보면 일반적으로 "CopyImageBlocksetPng"가 "팽창"직전에 시간이 걸리는 기능임을 알 수 있습니다.

당신이해야 할 방법을 찾아야 할 것은 이미지를 만들고 필요하기 전에 강제로드하는 것입니다. 그것은 분명히 또 다른 이야기입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top