2010-01-23 4 views
3

안녕하세요, 저는 uiscrollview를 가지고 있고, uiscrollview 내부에 uiimageview 객체를 가지고 있습니다. 앱을 시작합니다. 다음 scrollview 오른쪽에 스크롤 및 scrollview 변경하지만 다음에 추가 할 uiimageview 개체를 볼 수 없습니다 - (void) scrollViewDidEndDecelerating : (UIScrollView *) scrollView. 전에 다음 객체를 추가하기 전에 이전을 제거합니다 ... 무엇이 잘못 되었나요? UIScrollView에서 하위 뷰 UIImageview를 제거하십시오.

제가

UIImageView *l; 

    for (NSInteger ko=0; ko<[[scroll subviews] count]; ko++){ 
     if ([[[scroll subviews] objectAtIndex:0] isKindOfClass:[UIImageView class]]){ 

      //This code never gets hit 
      l=[[scroll subviews] objectAtIndex:0]; 
      [l removeFromSuperview]; 
      l=nil; 

     } 
    } 

다음 제가

[addSubview 스크롤 : 이미지 뷰를] 다음 객체를 추가 사용 객체를 제거하는 단계;

스크롤 뷰에 110 개의 이미지를 추가 할 때 내 앱이 작동하지 않아 이전 버전의 개체가 삭제되므로 추측 할 수있는 메모리를 관리해야합니다. 이것은 이전 개체를 제거하는 이유입니다.

누구든지 도와주세요!

답변

2

제안의 몇 가지 바른 길에 당신을 얻을 수 있습니다 :

  1. 당신은 메모리가 문제가 있다고 생각되면, 문제를 분할. 예를 들어 한 번에 10 개의 이미지를 추가/제거 할 수 있습니다.

  2. UIView의 태그 속성은 자신의 루프에 문제가 발생하지 않도록하려는 경우 가장 친한 친구입니다. UIImageViews에 대한 특정 태그를 필요할 때 설정할 수 있으며 [UIView viewWithTag : tag]를 사용하여 태그를 검색 할 수 있습니다. 재귀 적으로 작동합니다.

  3. st3fan은 동시 수정에 대한 매우 좋은 점을 제기합니다. 일반적으로 그것을 피하는 좋은 방법은 "삭제 배열"을 추가 한 다음 removeObjectsInArray를 제거하는 것입니다.

2

첫 번째 문제는 배열을 반복하면서 루프를 돌리는 것입니다. 또한 ko 루프 색인은 어디에서도 사용되지 않습니다.

NSArray* subviews = [[NSArray alloc] initWithArray: scroll.subviews]; 
for (UIView* view in subviews) { 
    if ([view isKindOfClass:[UIImageView class]]) { 
     [view removeFromSuperview]; 
    } 
} 
[subviews release]; 

그건 당신이 뭘 하려는지 정확히 아닌가요 : 당신은 항상 0

무엇에 대한 항목을 잡아?

+0

모든 개체를 제거하고 싶지 않습니다. uiscrollview에서 장소 0에 객체가 있습니다. 내가 다른 객체를 추가하고 싶기 때문에 첫 번째 객체를 제거하고 싶다. 새 개체는 이미 장소 0에서 1로 스크롤 되었기 때문에 0 장소가 아닌 1 곳에 putted되어야합니다. 45 개 이상의 이미지를 uiscrollview에 추가 한 후에 이전 객체를 제거하지 않으면 메모리 문제. 이전 개체를 제거해야 메모리를 확보 할 수 있습니다. – stefanosn

+0

하위 뷰의 순서는 실제로 관련이 없으므로 종속되지 않아야합니다. scroll.subview의 서브 뷰 인덱스와 실제 위치 사이에는 아무런 관련이 없습니다. 그게 당신이 원하는 그때 나는 당신도 자신의 견해 배열을 유지하고 그들이 전시 순서에 있는지 확인하는 것이 좋습니다. –

+0

St3fan, 하위 뷰를 해제하지 마십시오. NSArray arrayWithArray : 자동 변환 된 배열을 반환합니다. 이벤트 루프가 종료되고 릴리스 풀이 하위 뷰를 릴리스하려고 시도하면 이미 사라지고 앱이 다운됩니다. –