2011-09-06 5 views
6

사용자가 UIScrollView를 수동으로 스크롤하면 내 상 대의 scrollViewDidScroll 메서드가 새로 업데이트 된 contentOffset 값과 함께 반복적으로 호출됩니다. "[scrollView setContentOffset : 320 animated : YES"를 호출하면 위임 메서드가 같은 방식으로 호출됩니다. Apple이 UIView 클래스 참조에서 권장하는 것처럼 정상 스크롤 속도가 사용자 환경에 비해 너무 빠르기 때문에 "animatedWithDuration :"블록에 "[scrollView setContentOffset : 320]"을 동봉했습니다.UIScrollView가 애니메이션 중에 scrollViewDidScroll 메시지를 전송하는 방법

하지만 ... 이제는 내 scrollViewDidScroll 메서드가 더 이상 애니메이션이 아닌 최종 값으로 애니메이션 시작 부분에 한 번만 호출됩니다. 이전의 "beginAnimations :"메서드를 대신 사용하면 동일한 효과를 얻습니다.

그래서 ... 아무도이 문제를 해결하는 방법을 알고 있습니까?

그런데 UIScrollView의 "setContentOffset"메서드는 동일한 동작을 보여줍니다. 이전에는 애니메이션 중에 호출해야했지만 이제는 한 번만 호출됩니다.

답변

6

Fichek의 힌트 덕분에, 나는이 일을 얻었습니다. Fichek이 말했듯이 애니메이션 중에는 변경된 속성에 대한 알림을받지 못합니다. 트릭은 변경된 속성에 의존하는 모든 항목이 동시에 애니메이션되도록하는 것입니다. 원래 속성과 동일한 블록에서 애니메이션을 설정해야합니다. 그런 다음 애니메이션에서 "UIViewAnimationOptionAllowUserInteraction"을 설정하면 동일한 속성의 진행중인 사용자 상호 작용이 여전히 작동하며 놀랍도록 잘 말해야합니다. 이것은 이상이 해결 방법이다

[UIView animateWithDuration:0.5 delay:0 
        options:UIViewAnimationOptionAllowUserInteraction 
       animations:^{ 
    [theScrollView setContentOffset:offset]; 
    // compute newCenter from the new offset 
    theDraggedView.center = newCenter; 
} completion:^(BOOL finished) {}]; 
+0

: 여기 어떻게 설정 내 애니메이션입니다 - 내 구체적인 사례를 들어

은 - 아래에있는 UIScrollView의 스크롤하면서, 드러그보기 고정을 유지합니다. scrollViewDidScroll에서 스크롤 변경 사항을 대리자에게 알립니다.이 방법으로는이 작업을 수행 할 수 없습니다. 비슷한 질문은 여기에 게시 : http://stackoverflow.com/questions/21749950/how-to-properly-animate-uiscrollview-contentoffset – Vlad

관련 문제