2011-08-24 3 views
0

목표 C 및 IOS 개발 속도가 상당히 빠르지 만, 애니메이션이 부족합니다 (애니메이션 부족 : 예 종류).킨들 앱과 유사한 뷰 전환 생성하기

Amazon Kindle App에서 사용 된 것과 유사한 페이지 전환을 개발하는 방법에 대한 조언이 필요합니다. Kindle 앱에서 책을 읽을 때 왼쪽 또는 오른쪽으로 스 와이프하면 페이지가 '넘깁니다'. 페이지 전환은 현재 페이지가 오른쪽 또는 왼쪽으로 슬라이딩되고 새로운 페이지가 왼쪽 또는 오른쪽에서 오는 것으로 표시됩니다. 지나치게 화려하지 않고 진행되는 상황을 시각적으로 잘 보여줍니다. 흥미롭게도, 충분히 스 와이프하지 않으면 현재 페이지가 다시 제자리에 고정됩니다. 그래도 내가 그 부분을 필요로하는지 잘 모르겠다.

해당 뷰는 UIWebView입니다. 나는 다른 UIWebView를 craete하고 필요에 따라 내용을 채우고 둘 사이의 전환을 애니메이션으로 만들 수 있다고 가정합니다. 어떻게하는지 잘 모르겠습니다.

저는 IOS 4 이상을 코딩하고 있습니다.

고맙습니다.

답변

1

내 응용 프로그램에서 비슷한 것을 만들고 있습니다. 길게 누르면 제스처 처리를 담당 내 코드 봐 (뿐만 아니라 강타 수) :

float startX; 
float displacement; 
-(IBAction)handleLongPressGesture:(UILongPressGestureRecognizer *)sender 
{ 

    float nowX; 
     if (sender.state == UIGestureRecognizerStateBegan) 
     { 
      startX = [sender locationInView:mainWidgetView].x; 
     } 
     if (sender.state == UIGestureRecognizerStateEnded || sender.state == UIGestureRecognizerStateCancelled) 
     {  
      if (abs(displacement) > PIXELS_TO_MOVE) 
      { 
       if (displacement > 0) 
        [self moveLeft]; 
       else if (displacement < 0) 
        [self moveRight ];      
      } 
      else 
      { 
       [self moveWebViewsToOriginalPositions]; 
      } 
      return; 
     } 

    nowX = [sender locationInView:mainWidgetView].x; 
    displacement = nowX - startX; 
    if ((displacement > 0 && slider.currentPage == 0) || (displacement < 0 && slider.currentPage == slider.numberOfPages -1 )) 
    { 
     return; 
    } 

    [self moveWebViewsBy:displacement]; 

} 


-(void)moveWebViewsBy:(float)dx 
{ 
     for (int i = 0; i<3 ; i ++) 
     { 
      float oldDx = [ mainWidgetManager originalPositionForWebView:i ] ; 
      //float oldDy = mainWebViews[i].layer.position.y; 
      float oldDy = 425/2; 
      [mainWebViews[i].layer setPosition:CGPointMake(oldDx+dx, oldDy)]; 
     } 


} 

-(void)moveWebViewsToOriginalPositions 
{ 

    [UIView animateWithDuration:0.4 
          delay:0 
         options: UIViewAnimationOptionCurveEaseOut 
        animations:^{ 
         for (int i = 0; i<3 ; i ++) 
         { 
          float oldDx = [ mainWidgetManager originalPositionForWebView:i ] ; 
          //float oldDy = mainWebViews[i].layer.position.y; 
          float oldDy = 425/2; 
          [mainWebViews[i].layer setPosition:CGPointMake(oldDx, oldDy)]; 
         } 

        } 
        completion:nil]; 

} 

은 당신이 어떤 도움이 필요하면 알려주세요. 원하는 경우 스 와이프 책임 코드를 보여줄 수 있습니다.

+0

감사합니다. 죄송합니다. 응답하는 데 너무 오래 걸렸습니다. 나는 이것이 나를 올바른 방향으로 데려 갈 것이라고 생각한다. 도와 주셔서 감사합니다. – Chris

+0

@piotr 코드가 훌륭합니다. 이것은 하나의 탭 기능과 유사한 제스처입니다. – wagashi

+0

고마워, 친구! UILongPressGestureRecognizer는 세 개의 웹 뷰가 포함 된 뷰에 배치됩니다. minimumPressDuration이 0.1로 설정되어있어 즉시 조치가 취해집니다. – Piotr

관련 문제