2010-01-01 4 views
0

3 개의 UIScrollViews가있는 UIView가 있습니다. 이미 이미지가 할당되어있는 커스텀 UIImageViews로 각각로드합니다. 커스텀 UIImageViews는 간단하며 스크롤 뷰 내에서 이미지 뷰를 추적 할 수있는 몇 가지 새로운 속성 만 소개합니다.UIImageViews를 UIScrollView 및 성능에로드

이미지가 디스크에서 매우 빠르게로드됩니다. 아래 코드는 매우 빠르게 실행되지만 scrollview에 아무것도 나타나지 않으면 이미지 뷰 당 약 6 초를 기다려야합니다. 모든 이미지를로드하려고하면 응용 프로그램이 충돌합니다.

Program received signal: “0”. 

일반적으로 메모리 부족 오류입니다. 사진은 휴대 전화의 사진 보관함에서 나옵니다. 시뮬레이터에서 사용되는 이미지를 보면 크기가 213KB에서 401KB 사이입니다. 분명히 뭔가 잘못하고 있지만 확실하지 않습니다.

페이징을 허용하기 때문에 아마도 tableview를 사용할 수는 있지만 더 나은 성능을 제공하는 tableview인지 확실하지 않습니다. scrollview 문제는 모든 이미지 뷰를 느린 것보다 스크롤 뷰에서 한 번에로드해야한다는 것입니다. imageviews가 이미 (싱글 톤) 사전에로드되었으므로 scrollview에로드하는 데 너무 오래 걸리는 이유는 무엇입니까? 모든 UI는 IB에서 수행되었습니다.

일반적으로 더 나은 방법이 있습니까? 얼마나 자주이 코드는

- (void) addImageViewsToScrollView:(NSMutableDictionary*)imageViews scrollView:(UIScrollView*)scrollView 
{ 

int widthRunningTotal = 0; 
int count = 0; 

for(NSString *s in [imageViews allKeys]){ 
    CustomImageView *myImageView = [imageViews valueForKey:s]; 
    myImageView.imageName = s; 
    myImageView.imageId = count; 
    myImageView.frame = CGRectMake(widthRunningTotal, 0, 160, 100); 
    myImageView.contentMode = UIViewContentModeScaleAspectFit; 
    [scrollView addSubview:myImageView]; 
    widthRunningTotal += 160; 
    count++; 
} 
scrollView.contentSize = CGSizeMake(widthRunningTotal, 100); 
} 

답변

0

라고됩니까 : 여기

는 scrollviews에 imageviews를로드하는 코드는? 기존 서브 뷰를 제거하는 위치는 어디에도 표시되지 않으므로 여러 번 발생하면 많은 서브 뷰가 생성됩니다.

+0

이보기가로드 될 때마다 발생합니다. 사용자는 다른 뷰에서 새 이미지를 추가하여 모든 이미지 뷰를 다시로드하여 새 이미지를 표시 할 수 있습니다. 보기를 종료 할 때 이미지 뷰를 제거해야합니까? 그러나이보기를 처음로드 할 때 메모리 문제가 발생합니다. – user230949

+0

아니요, 뷰의 인스턴스화마다 두 번 이상 호출하지 않으면 괜찮습니다. 하나의 뷰를로드하려고 시도하고 그 뷰가 무엇인지 봅니다. –

+0

scrollview1에 16 개의 이미지가 있습니다. 다른 두 scrollviews의로드를 중지했습니다. 30 초 동안 이미지가 나타날 때까지 기다렸다가 앱에 메모리 경고가 표시됩니다. 나는 첫 번째 이미지를 스크롤하고 다른 메모리 경고를 얻는다. 두 번째 이미지를 스크롤하면 회전 애니메이션이 나타나고 앱 수신 신호가 '0'으로 충돌합니다. 이것은 기기에만 있습니다. 시뮬레이터가 빠릅니다. – user230949