2011-08-24 60 views
0

我非常喜歡Objective C和IOS開發的速度,但我沒有做任何動畫(缺少動畫:是的東西)。創建視圖轉換與Kindle應用程序類似

我想就如何開發類似於亞馬遜Kindle應用程序中使用的頁面轉換提供建議。在Kindle應用中閱讀書籍時,向左或向右滑動會「翻動」頁面。翻頁由當前頁面向右或向左滑動顯示,新頁面從左側或右側進入。這是一個很好的視覺指示,說明正在發生的事情,而不會過分浮華。有趣的是,如果你沒有足夠的滑動,當前頁面就會回到原來的位置。不知道我需要那部分,但。

有問題的視圖是一個UIWebView。我假設我可以製作另一個UIWebView,根據需要填充其內容,併爲兩者之間的轉換創建動畫。只是不知道該怎麼做。

我正在爲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

相關問題