2012-10-20 5 views
0

나는 ICarousel을 사용하여 응용 프로그램을 제작 중입니다. 회전 장치에는 약 30 개의 항목이 있습니다. 각 항목은 UIImageView에서 애니메이션을 보여주는보기입니다.iCarousel ios에서보기 재사용

지금 당장은 30 개의 뷰를 모두 생성하고 배열에 추가 한 다음 필요에 따라 캐 러셀에 공급합니다.

 SBTViewController* iv1 = [[SBTViewController alloc] initWithNibName:@"SBTViewController" bundle:nil]; 
    SBTViewController* iv2 = [[SBTViewController alloc] initWithNibName:@"SBTViewController" bundle:nil]; 
..... 
..... 
    SBTViewController* iv30 = [[SBTViewController alloc] initWithNibName:@"SBTViewController_iPhone" bundle:nil]; 


viewsarray = [NSArray arrayWithObjects: iv1,iv2... iv30] 

와 회전 목마가 더 뷰를 필요로 할 때 - 난 그냥 배열

에서 뷰를 제공는 그러나, 나는 MemoryWarnings을 받기 시작. 는 'reuseView 사용하는 시도 "옵션을하지만, 단순히 작동하지 않거나 뭔가 오해 다음이 호출 될 때마다 :.

- (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView *)view 
{ 

} 

가 난 그냥 변경하려고"내 오프 스크린보기 중 하나에보기 " . 그러나 작동하지 않습니다. 회전 목마가 빈 화면을 보여줍니다.

을 잘못 무엇입니까?

답변

2

ReusingView이 RECY에 의해 ALLOC/할당 해제의 전망에 대한 필요성을 줄일 수 있도록 설계되어

감사 달라 붙어. 그러나 배열에 모든 뷰를 저장하기 때문에 한 번에 모두 만들어지고 어쨌든 해제되지 않기 때문에 도움이되지 않습니다.

근본적으로 너무 많은 이미지를 한 번에 메모리에로드하려고합니다 (뷰 수 x 뷰 당 애니메이션 프레임 수).

동적으로 프레임을로드하는 방법을 찾아야합니다. 실시간으로로드 할 수있는 PVR 이미지를 사용하여 애니메이션을 재생하는 방법을 설명하는 GLView 라이브러리 (https://github.com/nicklockwood/GLView)를 사용해보십시오. GLView 라이브러리에는 UIImageView처럼 작동하는 GLImageView 클래스가 포함되어 있습니다.하지만 모든 이미지를 미리로드하지 않고 재생할 이미지 파일 이름 배열을 지정해 보겠습니다.

+0

감사합니다. Nick (위대한 iCarousel에 감사드립니다!). reusingView 매개 변수를 이해하는 데 도움을 주시겠습니까? 그것은 내가 회전식에서 얻은 포인터이며 거기에 내 하위 뷰를로드해야합니까? 아니면 내 뷰와 함께 init이 필요하고 그것을 회전식으로 다시 전달할 포인터입니까? –

+0

iCarousel은 10,000 개의 뷰를 포함 할 수 있지만 한 번에 몇 개만 표시되므로 배열에 10,000 개의 뷰를 저장하거나 릴리즈 된 뷰를 지속적으로 할당하는 대신 iCarousel 창은 동일한 몇 개의 뷰를 재활용합니다. 보기가 화면에서 벗어날 때마다 화면에서 스크롤되는 다음보기에 사용되는 재활용됩니다. –

+0

그래서 reusingView 매개 변수가 nil이면 새보기를 작성하여 리턴해야합니다. reusingView 매개 변수가 nil이 아닌 경우이를 무시하고 새보기를 반환하거나 속성 (특정 캐 러셀 항목 색인에 고유 한 항목)을 재설정하여 반환 할 수 있습니다. –