2011-07-05 4 views
0

편집 : 아래 답변을 참조하십시오.UIScrollView의 여러 페이지에 대해 PagingEnabled

나는 마침내 포기하고 내 문제를 요청하러 온 ...

것은 나는 작은 아이콘 스크롤 메뉴에 대한있는 UIScrollView를 사용하고 있습니다. 페이징을 사용할 수있는 각 페이지에서 중앙에 아이콘이 있고 왼쪽과 오른쪽에 2 개와 다른 보이는 아이콘이 있습니다. 하나의 아이콘에서 이웃으로 이동할 수는 있지만 괜찮습니다. 단, 빠른 스크롤을 수행하면 화면의 너비 인 3 개 이상의 아이콘으로 이동하지 않습니다.

3 개 이상의 아이콘을 스크롤 할 수 있고 자석 동작이 느려지는 경우에만 트리거됩니다.

속도를 계산하기 위해 스크롤보기를 예약하고 속도가 빠를 때 NO로 pagingEnabled 속성을 설정하고 속도를 느리게 할 때 다시 YES로 설정했지만 YES로 설정 되 자마자보기가 표시됩니다. 마치 새로운 페이지로 옮겨 졌음을 감지하지 못했던 것처럼 원래 위치에서 매우 빠르게 돌아옵니다. 아무도 왜 이것을하는지 알 수 있습니까? 보기를 알리는 방법이 있다면 "지금 페이징 기능이 활성화되어 있지만보기 만하면 15 페이지가됩니다. 현재 페이지를 중심에두고 처음부터 다시 돌아 오지 마십시오." (이 도움이 될 수있는 경우)

여기 내 업데이트 기능의 다음에 setContentOffset를 사용하여,

-(void)update:(ccTime)dt { float velocity = fabsf((self.previousOffset-self.scrollView.contentOffset.y)/dt); self.previousOffset = self.scrollView.contentOffset.y; CCLOG(@"Velocity: %f", velocity); if(self.scrollView.pagingEnabled) { if(velocity > 100) { self.scrollView.pagingEnabled = NO; } } else { if(velocity < 100) { self.scrollView.pagingEnabled = YES; } } }

답변

0

내가 마지막으로 꽤 명백했다 해결책을 찾았지만, 내가 처음에보고하지 않았다 scrollView.

여기에 새로운 업데이트 기능입니다 :

-(void)update:(ccTime)dt 

{ 

    float velocity = 1000; 
    if(self.previousOffset) 
    { 
     velocity = fabsf((self.previousOffset-self.scrollView.contentOffset.y)/dt); 
    } 
    self.previousOffset = self.scrollView.contentOffset.y; 

    if(velocity < 300) 
    { 

     CGSize screenSize = [[CCDirector sharedDirector] winSize]; 
     float halfScreen = screenSize.width/2; 
     CCLayer *panel = (CCLayer *)[self getChildByTag:1]; 
     SQScrollViewMenu *menu = (SQScrollViewMenu *)[panel getChildByTag:1]; 
     SQMissionItem *currentItem = (SQMissionItem *)[menu getChildByTag:currentPage]; 

     float contentOffsetY = [self.scrollView contentOffset].y; 
     CCLOG(@"Currentpage: %i ; currentoffsetY: %f", currentPage, contentOffsetY); 
     float distance = contentOffsetY + [currentItem position].x - halfScreen + panel.position.x + menu.position.x + panel.parent.position.x - 60; 
     CCLOG(@"Which gives a distance of: %f", distance); 

     [self.scrollView setContentOffset:CGPointMake(0, distance) animated:YES]; 
     self.previousOffset = 0; 
     [self unschedule:@selector(update:)]; 
     CCLOG(@"Is unscheduled"); 
    } 
} 

그리고 그것은 거의 적어도, 그것은 시뮬레이터에 ... 노력하고 있습니다. 하지만 아이폰 4에서 시도하자마자 더 이상 작동하지 않는다. 그것은 항상 그 업데이트 함수에 들어가지만, 8 중 7 번, 그것은 scrollView를 그대로 블록하고 그것을 포기한 위치로 다시 끌어 오지 않습니다 ...하지만 때로는 않습니다.

누구나 아이디어가 있습니까? 나는 그물에 유사한 문제점을 찾아 냈다, 그러나 그 중 아무도는 이것을 해결할 수 없었다.

관련 문제