【问题标题】:Creating View Transitions Similar to Kindle App创建类似于 Kindle 应用程序的视图转换
【发布时间】:2011-08-24 15:41:58
【问题描述】:

我对 Objective C 和 IOS 开发非常了解,但我没有做过任何动画(缺少动画:YES 之类的东西)。

我想要一些关于如何开发类似于 Amazon Kindle 应用程序中使用的页面转换的建议。在 Kindle 应用程序中阅读书籍时,向左或向右滑动即可“翻页”。翻页由当前页面向右或向左滑动来指示,新页面从左侧或右侧进入。这是一个很好的视觉指示,可以很好地指示正在发生的事情,而不会过于浮华。有趣的是,如果您没有足够远地滑动,当前页面会弹回原位。不过,我不确定我是否需要那部分。

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

我正在为 IOS 4 及更高版本编写代码。

谢谢

【问题讨论】:

    标签: objective-c ios animation uiview uiwebview


    【解决方案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];
    
    }
    

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

    【讨论】:

    • 谢谢。抱歉这么久才回复。我认为这将带我走向正确的方向。感谢您的帮助。
    • @piotr 你的代码很棒。这是一种类似于点击功能的手势,对吧?
    • 谢谢,伙计!这是放置在包含三个 webview 的视图上的 UILongPressGestureRecognizer。它将 minimumPressDuration 设置为 0.1,因此它会立即触发他的动作。
    • @piotr 我明白了,我会尽快尝试实现它。顺便说一句,我是女人:)
    • 哦,对不起!在这里很少见到女人;)然后让我知道结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-25
    • 2011-06-25
    相关资源
    最近更新 更多