2013-02-15 1 views
6

가로 UIScrollView 있습니다. "pull-to-reset"애니메이션의 변형을 만들고 싶습니다. 여기서 스크롤 뷰의 콘텐츠 크기 오른쪽 가장자리를지나 가게하고 손가락을 뗍니다. 그리고 스크롤 뷰를 다시 (0, 0) 콘텐츠 오프셋.취소 후 UIScrollView 바운스

내 대리자 메서드는 다음과 같습니다 : 나는 애니메이션의 지속 시간을 제어하려는 때문에 doAnimatedScrollTo: 사용자 지정 애니메이션 방법 필요

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate { 
    //check if it exceeds a certain critical value 
    if (scrollView.contentOffset.x - (scrollView.contentSize.width - IMAGE_WIDTH) > 80) { 
     [self doAnimatedScrollTo:CGPointMake(0, 0)]; 
    } 
} 

.

이것이 작동하는 동안 애니메이션이 대기열에있는 것 같습니다. UIScrollView "bounce"애니메이션이 먼저 발생하고 내 애니메이션이 발생합니다.

바운스 애니메이션을 취소하고 콘텐츠 스냅을 "스냅 한"상태로 유지 한 다음 애니메이션을 수행 할 수 있습니까?

+0

속성 i에서 바운스 속성의 선택을 취소 해 보았습니까 nspector? – jcesarmobile

+0

@ jcesar 아니요, 왜냐하면 바운스 속성을 명시 적으로 원하기 때문입니다. 애니메이션의 두 번째 절반이 실행되는 것을 원치 않습니다. "되 b다". – 1actobacillus

+0

그렇다면 가능하지 않다고 생각합니다. 바운스를 사용하면 바운스를 완전히 사용해야합니다. 어쩌면 하위 클래스를 만들면 전체 애니메이션을 변경할 수 있습니다. – jcesarmobile

답변

3

는이

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate { 
    //check if it exceeds a certain critical value 
    if (scrollView.contentOffset.x - (scrollView.contentSize.width - IMAGE_WIDTH) > 80) { 
    [scrollView setContentOffset:CGPointMake(0, 0) animated:YES]; 
    } 
} 
2

내가 다시있는 UIScrollView의 애니메이션을 바운스를 취소 달성하려고합니다.

급히 이동하는 동안 기본 동작을 그대로두고 싶었습니다. 그러나 scrollview가 이미 맨 위에 있고 사용자가 그것을 아래로 당겨 놓으면 (새로 고침을하는 것과 유사하게) 나는 바운스를 제어하고 커스텀을 수행하기를 원했습니다. 플래그가 설정되어있는 ScrollView 충분히

내가있는 ScrollView를 서브 클래스와 setContentOffset를 오버라이드 (override)
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate 
{ 
    if (isPullingTop && scrollView.contentOffset.y < -30) { 

     overrideBounce = YES; 
    } 
    isPullingTop = NO; 
} 

을 드래그하면있는 ScrollView의 위임에

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView 
{ 
    if (scrollView.contentOffset.y < 0.1) 
    { 
     isPullingTop = YES; 
    } 
} 

감지 :있는 ScrollView 위임에

나는 초기 위치를 추적

-(void)setContentOffset:(CGPoint)contentOffset 
{ 
    if (!overrideBounce) 
    { 
     [super setContentOffset:contentOffset]; 
    } 
    else 
    { 
     //customs stuff goes here , for example an animation 
     overrideBounce = NO; 
    } 
}