创建视图转换类似于Kindle应用程序

时间:2011-08-24 15:41:59

标签: objective-c ios animation uiview uiwebview

我很快就开始使用Objective C和IOS开发,但是我还没有做过任何动画(没有动画:没有什么东西)。

我想了解如何开发类似于亚马逊Kindle应用程序中使用的页面转换的一些建议。在Kindle应用程序中阅读书籍时,向左或向右滑动“转动”页面。页面转向由当前页面向右或向左滑动指示,新页面从左侧或右侧进入。这是一个很好的视觉指示,表明正在发生的事情,而不是过于华丽。有趣的是,如果你不刷得足够远,那么当前的页面会重新回到原位。但不确定我是否需要那部分。

有问题的视图是UIWebView。我假设我可以让另外一个UIWebView,根据需要填充其内容,并动画两者之间的过渡。只是不知道该怎么做。

我正在编写IOS 4及以上版本。

谢谢

1 个答案:

答案 0 :(得分: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];

}

如果您需要任何帮助,请告诉我。如果你愿意,我可以告诉你负责刷卡的代码。