2011-08-24 63 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

相关问题