使用动画进行 WebView 页面更改
Using animation for WebView page changes
我一直在网上搜索有关如何将动画合并到我的 UIWebView 控件中的示例,但一无所获。
我对动画不挑剔(一旦我了解如何将它附加到动作上,我就可以弄乱它),我只想要一些不仅仅是从一个网页到另一个网页的明显过渡,卷曲的页面, 从左(旧页面)到右(新页面)的动画,随心所欲。
有人可以 post 举个例子或引导我访问解释我如何执行此操作的页面吗?我阅读了有关 CATransition 的文档,但我仍然不知道如何将它合并到我的 UIWebView 导航中。
经过一些尝试,我得到了我想要的效果,我可能需要稍微调整一下,但这是我想出的:
在执行 loadRequest 之前(我现在更改了我的代码,以便通过 shouldStartLoadWithRequest 捕获所有页面更改,然后使用 webview loadRequest 手动设置新页面)我转到我编写的名为 animatePage 的 curl 动画例程:
- (void) animatePage
{
CATransition *animation = [CATransition animation];
[animation setDelegate:self];
[animation setDuration:1.0f];
animation.startProgress = 0.5;
animation.endProgress = 1;
[animation setTimingFunction:UIViewAnimationCurveEaseInOut];
[animation setType:@"pageCurl"];
//[animation setType:kcat];
[animation setSubtype:kCATransitionMoveIn];
[animation setRemovedOnCompletion:NO];
[animation setFillMode: @"extended"];
[animation setRemovedOnCompletion: NO];
[[myWebView layer] addAnimation:animation forKey:@"WebPageCurl"];
}
因此,要使用向上卷曲的页面动画为页面更改设置动画,我基本上会这样做:
[self animatePage];
[myWebView loadRequest:myRequest];
我可以在 loadRequest 之前或之后调用 animatePage
例程,这并不重要。
我知道这可能不是 "right" 完成工作的方法,但它似乎确实完成了工作。就像我说的,我需要在这里和那里拨它,但我对目前的结果很满意。
使用Swift:-
let animation = CATransition()//= [CATransition animation];
animation.delegate = self
animation.duration = 1.0
animation.startProgress = 0.5
animation.endProgress = 1
animation.timingFunction = CAMediaTimingFunction.init(name: kCAMediaTimingFunctionLinear)//kCAMediaTimingFunctionEaseInEaseOut)//kCAMediaTimingFunctionEaseOut
animation.type = "pageCurl"
animation.subtype = kCATransitionMoveIn
animation.isRemovedOnCompletion = false
animation.fillMode = "extended"
animation.isRemovedOnCompletion = false
webView?.layer.add(animation, forKey: "WebPageCurl")
我一直在网上搜索有关如何将动画合并到我的 UIWebView 控件中的示例,但一无所获。
我对动画不挑剔(一旦我了解如何将它附加到动作上,我就可以弄乱它),我只想要一些不仅仅是从一个网页到另一个网页的明显过渡,卷曲的页面, 从左(旧页面)到右(新页面)的动画,随心所欲。
有人可以 post 举个例子或引导我访问解释我如何执行此操作的页面吗?我阅读了有关 CATransition 的文档,但我仍然不知道如何将它合并到我的 UIWebView 导航中。
经过一些尝试,我得到了我想要的效果,我可能需要稍微调整一下,但这是我想出的:
在执行 loadRequest 之前(我现在更改了我的代码,以便通过 shouldStartLoadWithRequest 捕获所有页面更改,然后使用 webview loadRequest 手动设置新页面)我转到我编写的名为 animatePage 的 curl 动画例程:
- (void) animatePage
{
CATransition *animation = [CATransition animation];
[animation setDelegate:self];
[animation setDuration:1.0f];
animation.startProgress = 0.5;
animation.endProgress = 1;
[animation setTimingFunction:UIViewAnimationCurveEaseInOut];
[animation setType:@"pageCurl"];
//[animation setType:kcat];
[animation setSubtype:kCATransitionMoveIn];
[animation setRemovedOnCompletion:NO];
[animation setFillMode: @"extended"];
[animation setRemovedOnCompletion: NO];
[[myWebView layer] addAnimation:animation forKey:@"WebPageCurl"];
}
因此,要使用向上卷曲的页面动画为页面更改设置动画,我基本上会这样做:
[self animatePage];
[myWebView loadRequest:myRequest];
我可以在 loadRequest 之前或之后调用 animatePage
例程,这并不重要。
我知道这可能不是 "right" 完成工作的方法,但它似乎确实完成了工作。就像我说的,我需要在这里和那里拨它,但我对目前的结果很满意。
使用Swift:-
let animation = CATransition()//= [CATransition animation];
animation.delegate = self
animation.duration = 1.0
animation.startProgress = 0.5
animation.endProgress = 1
animation.timingFunction = CAMediaTimingFunction.init(name: kCAMediaTimingFunctionLinear)//kCAMediaTimingFunctionEaseInEaseOut)//kCAMediaTimingFunctionEaseOut
animation.type = "pageCurl"
animation.subtype = kCATransitionMoveIn
animation.isRemovedOnCompletion = false
animation.fillMode = "extended"
animation.isRemovedOnCompletion = false
webView?.layer.add(animation, forKey: "WebPageCurl")