2011-03-17 6 views
2

큰 이미지가 포함 된 UIScrollView가 있고 페이지간에 이미지를 스크롤하는 데 사용하고 있습니다. 메모리를 절약하기 위해 현재 표시된 이미지 앞뒤에 하나의 이미지 만로드하고 스크롤이 완료된 후 새 이미지를로드/릴리스합니다. 이 문제는 스크롤 속도가 빠르고 scrollViewDidEndDecelerating이 호출되지 않을 때 발생합니다. scrollViewDidEndDecelerating이 호출되면 활성 페이지에 이미지 이름을 표시하려고합니다.scrollViewDidEndDecelerating이 호출되지 않습니다.

어떻게 해결할 수 있습니까? 왜 이런 일이 발생합니까?

+0

오프셋을 변경하지 않는 경우 어떻게 스크롤을 구현합니까? 여러 가지 응용 프로그램에서이 작업을 여러 번 해봤으며 사용자가 설명하는 모든 작업은 "일반적인"방법 (scrollRectToVisible)으로 구현할 수 있으며 달성하려는 효과에 따라 애니메이션 부분을 지능적으로 사용/사용 중지 할 수 있습니다. 여기 당신이 뭔가 이상한 일을하고있는 것 같군요? – Adam

+0

당신은 이것에 대한 어떤 대답도 가지고 있습니다 ... –

답변

-1

scrollViewDidEndDecelerating:은 당신의 페이지 레이아웃을하는 것은 아닙니다. 당신은 scrollViewDidScroll:을 구현하고 스크롤 뷰의 contentOffset에 따라 현재 표시된 페이지 (들)을 계산한다. 가시 범위가 변경된 경우 이전에 표시되지 않은 페이지에 대한보기를 추가하고 더 이상 표시되지 않는 페이지를 제거하십시오.

+0

이것은 내 문제에 대한 해결책을 찾는데 도움이되지 못했습니다. – spd

0

이미지를 느슨하게로드하는 것과 같은 일을 스크롤보기에서 수행합니다. 우리는 사실 이미지가 흐릿한 저해상도 버전으로 만드는 썸네일을로드 한 다음 페이지가 실제로보기에 100 % 표시 될 때 실제 이미지를로드해야했습니다.

내가해야 할 일은 scrollViewDidScroll에서 다음 코드를 사용하는 것입니다. scrollView.

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
{  
    if (!_isCurrentlyRotating) { 
     CGFloat pageWidth = _scrollView.frame.size.width; 
     int page = floor((_scrollView.contentOffset.x - pageWidth/2)/pageWidth)+1; 

     if (_currentPage != page) 
      [self setCurrentPage:page]; 
    } 
} 

위의 예는 표시 될 페이지를 계산합니다 (스크롤로 사용). 페이지 뷰가 50 % 표시 될 때 실제로 현재 페이지 번호가 변경됩니다. 이 컨트롤을 페이지 컨트롤과 함께 사용하여 현재 페이지 점을 강조 표시 할 수 있습니다.

사용자가 손가락을 사용하여 페이지를 바꿀 때 (정상 동작) scrollviewDidEndDecelerating : scrollView는 페이지가 100 % 표시 될 때 호출됩니다 (스크롤 뷰에서 페이징이 사용 가능). 100 %는 한 페이지 만 다른 페이지의 일부로 볼 수 없음을 의미합니다.

하지만 scrollToPage : 함수를 호출하는 스크롤보기 끝에 '시작'버튼이 있습니다. 로 scrollRectToVisible를 사용

- (void) scrollToPage:(int)page { 
    CGRect frame; 
    frame.origin.x = self.scrollView.frame.size.width * page; 
    frame.origin.y = 0; 
    frame.size = self.scrollView.frame.size; 
    [self.scrollView scrollRectToVisible:frame animated:YES]; 
} 

는 : 애니메이션 다음 scrollViewDidEndDecelerating를 트리거하지 않는 방법 : 방법은 그래서 단순히 (단순 이미지보기에 테 고해상도 이미지를로드) 선명 방법 두 가지 방법으로 전화를 추가 그것을 호출 할 수 있도록 사용자가 스크롤하거나 처음부터 다시 시작 버튼을 누르면.

- (void) scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView { 
    [self sharpenImageView]; 
} 

- (void) scrollViewDidEndDecelerating:(UIScrollView *)scrollView { 
    [self sharpenImageView]; 
} 

이 정보가 도움이 되었기를 바랍니다.

0

때때로 당신의 프로젝트 및 다시 실행

시프트 & Cmd를 & K 시프트 청소 & Cmd를 & Alt 키 & K

0

scrollViewDidEndDragging이 완료 각 스크롤 한 후 호출

-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{} 

(당신이 draged 정지 후 전열 속도로 드래그하지 않는 경우이 FUNC를 호출하지 않는 것) scrollViewDidEndDecelerating는 스크롤 뷰를 사용 API를 이동하려면

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{} 

scrollViewDidEndScrollingAnimation 각 끌기에 호출하지 않습니다 끌기가 아니라,이 API가 호출됩니다.

-(void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView{} 
관련 문제