cocos2d-x 使用UIWebView加载网页
2012-06-13 09:26
399 查看
猴子原创,欢迎转载。转载请注明: 转载自Cocos2D开发网--Cocos2Dev.com,谢谢!
原文地址: http://www.cocos2dev.com/?p=248
前段时间项目中要微博授权登陆,使用的是web登陆方式。所以要在cocos2d-x中显示网页。所以就将UIWebView用进来了。
实现上讲也不是很难,你开打AppController.mm,你可以看到cocos2d-x的场景是被加载在一个EAGLView上面。所以我只需要取到EAGLView,在上面加一个UIView,UIView上面就可以放我的UIWebView。
实现:FMUIWebViewBridge.h
FMUIWebViewBridge.mm
因为这些都是OC代码,所以文件后缀使用mm,为了和C++代码混编。代码很简答,应该看得懂,我就不解释了。
下面就是封装这个oc代码,
FMLayerWebView.h
OK ,这样就完成了。
调用方法:
原文地址: http://www.cocos2dev.com/?p=248
前段时间项目中要微博授权登陆,使用的是web登陆方式。所以要在cocos2d-x中显示网页。所以就将UIWebView用进来了。
实现上讲也不是很难,你开打AppController.mm,你可以看到cocos2d-x的场景是被加载在一个EAGLView上面。所以我只需要取到EAGLView,在上面加一个UIView,UIView上面就可以放我的UIWebView。
实现:FMUIWebViewBridge.h
#import <Foundation/Foundation.h> #import <CoreLocation/CoreLocation.h> #import <UIKit/UIKit.h> #import "FMLayerWebView.h" @interface FMUIWebViewBridge : NSObject<UIWebViewDelegate,UIAlertViewDelegate>{ FMLayerWebView * mLayerWebView; UIView *mView; UIWebView *mWebView; UIToolbar *mToolbar; UIBarButtonItem *mBackButton; } -(void) setLayerWebView : (FMLayerWebView*) iLayerWebView URLString:(const char*) urlString; -(void) backClicked:(id)sender; @end
FMUIWebViewBridge.mm
// // FMUIWebViewBridge.cpp // WebViewDemo // // Created by Yanghui Liu on 12-6-5. // Copyright (c) 2012年 FMinutes company. All rights reserved. // #import "FMUIWebViewBridge.h" #import "EAGLView.h" @implementation FMUIWebViewBridge - (id)init{ self = [super init]; if (self) { // init code here. } return self; } - (void)dealloc{ [mBackButton release]; [mToolbar release]; [mWebView release]; [mView release]; [super dealloc]; } -(void) setLayerWebView : (FMLayerWebView*) iLayerWebView URLString:(const char*) urlString{ mLayerWebView = iLayerWebView; cocos2d::CCSize size = mLayerWebView-> getContentSize(); mView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, size.width , size.height)]; // create webView //Bottom size int wBottomMargin = size.height*0.10; int wWebViewHeight = size.height - wBottomMargin; mWebView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, size.width, wWebViewHeight)]; mWebView.delegate = self; NSString *urlBase = [NSString stringWithCString:urlString encoding:NSUTF8StringEncoding]; [mWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:urlBase ]]]; [mWebView setUserInteractionEnabled:NO]; //don't let the user scroll while things are //create a tool bar for the bottom of the screen to hold the back button mToolbar = [UIToolbar new]; [mToolbar setFrame:CGRectMake(0, wWebViewHeight, size.width, wBottomMargin)]; mToolbar.barStyle = UIBarStyleBlackOpaque; //Create a button mBackButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style: UIBarButtonItemStyleDone target: self action:@selector(backClicked:)]; //[backButton setBounds:CGRectMake(0.0, 0.0, 95.0, 34.0)]; [mToolbar setItems:[NSArray arrayWithObjects:mBackButton,nil] animated:YES]; [mView addSubview:mToolbar]; //[mToolbar release]; // add the webView to the view [mView addSubview:mWebView]; [[EAGLView sharedEGLView] addSubview:mView]; } - (void)webViewDidStartLoad:(UIWebView *)thisWebView { } - (void)webViewDidFinishLoad:(UIWebView *)thisWebView{ [mWebView setUserInteractionEnabled:YES]; mLayerWebView->webViewDidFinishLoad(); } - (void)webView:(UIWebView *)thisWebView didFailLoadWithError:(NSError *)error { if ([error code] != -999 && error != NULL) { //error -999 happens when the user clicks on something before it's done loading. UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Network Error" message:@"Unable to load the page. Please keep network connection." delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil]; [alert show]; [alert release]; } } -(void) backClicked:(id)sender { mWebView.delegate = nil; //keep the webview from firing off any extra messages //remove items from the Superview...just to make sure they're gone [mToolbar removeFromSuperview]; [mWebView removeFromSuperview]; [mView removeFromSuperview]; mLayerWebView->onBackbuttonClick(); } @end
因为这些都是OC代码,所以文件后缀使用mm,为了和C++代码混编。代码很简答,应该看得懂,我就不解释了。
下面就是封装这个oc代码,
FMLayerWebView.h
// // FMLayerWebView.h // WebViewDemo // // Created by Yanghui Liu on 12-6-5. // Copyright (c) 2012年 FMinutes company. All rights reserved. // #ifndef WebViewDemo_FMLayerWebView_h #define WebViewDemo_FMLayerWebView_h #include "CCCommon.h" #include "cocos2d.h" USING_NS_CC; class FMLayerWebView : public CCLayer{ public: FMLayerWebView(); ~FMLayerWebView(); virtual bool init(); LAYER_NODE_FUNC(FMLayerWebView); void webViewDidFinishLoad(); void onBackbuttonClick(); private: int mWebViewLoadCounter; }; #endifFMLayerWebView.mm
// // FMLayerWebView.mm // WebViewDemo // // Created by Yanghui Liu on 12-6-5. // Copyright (c) 2012年 FMinutes company. All rights reserved. // #include "FMLayerWebView.h" #include "FMUIWebViewBridge.h" static FMUIWebViewBridge *g_FMUIWebViewBridge=nil; FMLayerWebView::FMLayerWebView(){ } FMLayerWebView::~FMLayerWebView(){ [g_FMUIWebViewBridge release]; } void FMLayerWebView::webViewDidFinishLoad(){ } void FMLayerWebView::onBackbuttonClick(){ this->removeFromParentAndCleanup(true); } bool FMLayerWebView::init(){ if ( !CCLayer::init() ){ return false; } g_FMUIWebViewBridge = [[FMUIWebViewBridge alloc] init]; [g_FMUIWebViewBridge setLayerWebView : this URLString:"http://www.cocos2dev.com"]; return true; }
OK ,这样就完成了。
调用方法:
FMLayerWebView* web = FMLayerWebView::node(); web->setPosition(CCPointZero); addChild(web);
相关文章推荐
- cocos2d-x 使用UIWebView加载网页
- cocos2d-x 使用UIWebView加载网页(顺便可以看到如何用OC调C++)
- cocos2d-x 使用UIWebView加载网页
- cocos2d-x 使用UIWebView加载网页
- cocos2d-x 使用UIWebView加载网页
- cocos2d-x 学习日志(2)之使用UIWebView加载网页
- Xcode9学习笔记34 - 使用UIWebView控件加载网页
- 15.Xcode7中使用UIWebView时加载不出网页的问题
- iOS中UIWebView网页加载组件的基础及使用技巧实例
- 使用UIWebView加载网页
- cocos2d-x加载UIWebView显示网页
- UIWebView 加载网页时使用程序中的背景
- 使用UIWebView 有些网页加载卡顿 内存还飙升的可别厉害
- 使用UIWebView加载本地或远程服务器上的网页
- IOS中使用UIWebView 加载网页、文件、 html的方法
- IOS中使用UIWebView 加载网页、文件、 html的方法
- win32下cocos2d-x使用默认浏览器加载网页
- 总结-UIWebView的使用-加载网页、html文件、本地文件等
- UIWebView 加载网页时使用程序中的背景
- cocos2dx IOS 使用UIWebView来加载网页