创建视图转换与Kindle应用程序类似
问题描述:
我非常喜欢Objective C和IOS开发的速度,但我没有做任何动画(缺少动画:是的东西)。创建视图转换与Kindle应用程序类似
我想就如何开发类似于亚马逊Kindle应用程序中使用的页面转换提供建议。在Kindle应用中阅读书籍时,向左或向右滑动会“翻动”页面。翻页由当前页面向右或向左滑动显示,新页面从左侧或右侧进入。这是一个很好的视觉指示,说明正在发生的事情,而不会过分浮华。有趣的是,如果你没有足够的滑动,当前页面就会回到原来的位置。不知道我需要那部分,但。
有问题的视图是一个UIWebView。我假设我可以制作另一个UIWebView,根据需要填充其内容,并为两者之间的转换创建动画。只是不知道该怎么做。
我正在为IOS 4及以上编码。
谢谢
答
我在我的应用程序中做出了类似的事情。看看我的代码负责处理长按手势(它也可以刷卡):
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];
}
让我知道你是否需要任何帮助。如果需要,我可以向您展示负责刷卡的代码。
谢谢。对不起,花了这么长时间回应。我认为这会让我走向正确的方向。我感谢您的帮助。 – Chris
@piotr你的代码很棒。这是一种类似于单击功能的手势,对吧? – wagashi
谢谢,伙计!这是放在视图上的UILongPressGestureRecognizer,其中包含三个网页浏览。它的minimumPressDuration设置为0.1,因此它立即触发他的行动。 – Piotr