metaio是德国的一家增强现实公司,它开发的增强现实sdk具有诸多优点,最近在做一个类似的项目,选用了它的SDK,根据下载下来的SDK包中的教程7(Tutorial7)
我将在接下来的几章中详细介绍其实现原理,和一些基本的IOS开发知识;废话不多说,开始metaio增强现实之旅
具体流程:
1、首先在AppDelegate上修改didFinishLaunchingWithOptions:方法。增强现实
此方法当然是在启动时完成的一些操作;然后隐藏状态栏
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade];由于该应用为自适应的,所以载入程序时需要判断一下设备是ipad或iphone
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPhone" bundle:nil]; } else { self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPad" bundle:nil]; }当然判断完后要载入相应的视图控制对象,这里通过initwithNibName方法将viewController用IB创建的视图控制对象(如ViewController_iPhone
@interface ViewController : UIViewController <UIWebViewDelegate> @property (unsafe_unretained, nonatomic) IBOutlet UIWebView *tutorialsView;由于在nib文件中有UIWebView视图,所以需要遵守UIWebViewDelegate委托协议实现相关功能,在.h文件中声明一个UIWebView类型插座,用于和nib文件对象连接到一起,连接过程就不说了;
- (void)viewWillAppear:(BOOL)animated { //NSBundle通过mainBundle方法获取应用程序更路径,在tutorialContent_crossplatform/Menu目录下查找index.html, NSString *htmlPath = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html" inDirectory:@"tutorialContent_crossplatform/Menu"]; NSURL *url = [NSURL fileURLWithPath:htmlPath]; //根据url创建并返回一个request对象 NSURLRequest *requestObj = [NSURLRequest requestWithURL:url]; //发起一个异步请求连接到制定url [tutorialsView loadRequest:requestObj]; }
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
委托方法,该方法主要是让用户根据用户点击连接的request来load视图页面,其中一段方法如下
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { //获取request的路径 NSURL* theURL = [request mainDocumentURL]; //转换成string NSString* absoluteString = [theURL absoluteString]; //取出=号后面的数字 tutorialId = [[absoluteString componentsSeparatedByString:@"="] lastObject]; //如果有前缀为metaiosdkexample:// if ([[absoluteString lowercaseString] hasPrefix:@"metaiosdkexample://"]) { if( tutorialId ) { xibFile = [NSString stringWithFormat:@"Tutorial%@",tutorialId]; if ([tutorialId isEqualToString:@"1"]) { //根据NibName初始化对应的视图控制对象 Tutorial1ViewController* tutorialViewController = [[Tutorial1ViewController alloc] initWithNibName:xibFile bundle:nil]; //设置视图控制对象的模态显示变换效果为渐变 tutorialViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; //设置以模态视图控制对象显示tutorialViewController [self presentModalViewController:tutorialViewController animated:YES]; //[tutorialViewController release]; }
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. tutorialsView.delegate = self; }
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { //只有当iphone时朝下不自动转屏 return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); } else { return YES; } }
总结:至此,我们可以实现从:AppDelegate中初始化ViewController-->ViewController中ViewwillAppear显示index.html主页-->针对UIWebView的链接点击的处理通过webview方法来实现-->跳转显示指定的nib文件,增强现实