2012-12-08 3 views
3

환경 :iOS 앱 : 지연 문제 때 디스플레이 작은 이미지의 엄청난 양의

나는 "photo mosaic"응용 프로그램을 만드는 오전, 나는 작은 이미지 1024 (32 * 32) 조각을 표시하려고 (망막 크기 -> w : 30px h : 20px)를 선택합니다. 즉, 전체 화면 이미지 크기와 동일한 크기입니다.

문제 :

내가 1024 UIImages을로드 1024 UIImageViews를 작성하고 UIView의에 그들 모두를 추가 할 수 있습니다. 이보기로 스크롤하면 iPhone4 (iOS 5) 및 iPhone5 (iOS 6)에 대한 테스트가 크게 지연됩니다. iPhone4에 그냥 나타 났으며 iPhone5에서도 괜찮습니다. (iPhone5가 훨씬 더 좋은 CPU를 가지고 있다고 가정하면 합리적이라고 생각합니다.) 모든 이미지를 가정 할

이미 (방법 "imageNamed"을 사용) 메모리에 로컬 디렉토리에서로드 된, 그래서 나는/문제가 단계 디스플레이의 어딘가에 있어야합니다 생각 :

내가 무슨 생각 이미지를 렌더링합니다.

그럼 그것에 대해 어떤 생각이 드나요? 어떤 아이디어라도 도움이 될 것입니다.

정말 고마워요,

UPDATE

내가 @Antwan 반 Houdt에서 조언을했다 후가 훨씬 낫다. 여기에 원칙 코드 : 그럼 당신은 그냥 제로 smallImage의 알파 값을 설정

-(void)updateCoverImageView:(UIImageView *)smallImage{ 
    UIGraphicsBeginImageContextWithOptions(self.frame.size, NO, 0.0f); 
    CGContextRef ctx = UIGraphicsGetCurrentContext(); 
    [self.coverImageView.layer renderInContext:ctx]; 
    [smallImage.image drawInRect:smallImage.frame]; 
    self.coverImageView.image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
} 

, 그래서 시스템을 렌더링하지 않습니다. 그리고 표지 이미지가 그것을 대체 할 것입니다. 많은 시간 동안 UIView를 동시에 표시 할 때 발생하는 지연 문제가 해결됩니다.

답변

3

모든 이미지가 자체보기에 있습니까?

어느 경우이든 엄청난 양의 이미지의 경우 1 개의보기에서 그리기를 고려해야하며 그리기 방법이 너무 느린 경우 이미지를 한 번 그려보고 이미지를 렌더링 한 다음 그 그림을 그리면됩니다. 이미지가 캐시 된대로 표시됩니다.

Apple에서 제공하는 여러 가지 가이드를 통해 사용자 지정보기 드로잉 및 그와 유사한 기능을 처리 할 수 ​​있습니다.

+0

예 .. 거기 UIView에 추가 된 1024 UIImages 및 1024 UIImageViews 있습니다. (내 게시물을 편집 한) – swang

+0

+1 불합리한 양의 UIViews 사용을 방지하기 위해 사용자 지정 그림을 추천합니다. – Till

+0

@swang 많은 뷰가 있습니다 ... 모든 UIView에는 자체 드로잉 컨텍스트가 있습니다. 이것은 애플 리케이션의 메모리 사용에 대해 '편리한'것은 아닙니다.당신은 정말로 적은 관점으로 이동해야합니다. –

0

코드의 모든 세부 사항을 알지 못하는 경우이 모든 것을 백그라운드 스레드에서 수행해야합니다. 그래픽 컨텍스트, 그랜드 센트럴 디스패치를 ​​읽은 다음 두 개념을 사용하여 다른 스레드에서 결과 이미지를 만든 다음 결과 이미지를 가져 와서 메인 스레드에 표시합니다.

사실상 모든 이미지를 병렬로 처리 할 수 ​​있으므로 GCD를 사용하여 매우 빠르게 처리 할 수 ​​있습니다.

코드를 게시 할 수 있다면 최적화 할 수 있도록 도와 드리겠습니다.

+0

주 스레드에서 UIKit 호출을 만들어야 만 비동기 스레드에서 "디스크"를 실제로 인스턴스화하고로드하는 것에 유의해야한다. –

관련 문제