`
yidongkaifa
  • 浏览: 4059460 次
文章分类
社区版块
存档分类
最新评论

Three20研究院之解决真机IOS6在Xcode4.5下无法编译与IOS设备自动旋转问题(九)

 
阅读更多

之前一直都是在Xcode4.4下使用Three20开发框架,今天升级到4.5了发现在IOS6下无法将程序编译到真机上,还有就是Three20在IOS6下旋转的代码全部失灵了,非常奇怪。今天抽了一点时间研究了一下,本文仅作为自己备份!

首先我们解决无法编译的问题。

three20的开发包我用的是gitbug上的https://github.com/facebook/three20官网上的Three20迟迟不见更新,无奈啊!

找到UIViewAdditions.h 和UIViewAdditions.m这两个类,将#ifdef DEBUG 标签全部改成 #ifdef DEBUG_TOUCHES

像这里写的一样 一共三处https://github.com/cogenta/three20-1.0.5/commit/be70e1ff3965c0ff4f7598bf5213349629a27540

这一步做完后,在IOS6的模拟器上已经可以运行Three20程序了,可是还是不能编译到真机!如下图所示,我们需要把Valid Architectures 的属性改成成 armv6 armv7 修改完毕后即可正常编译在真机。

下面我们来解决在IOS6中如何让Three20设备旋转

在AppDelegate中修改如下代码

01 //创建导航条
02 TTNavigator* navigator = [TTNavigator navigator];
03 navigator.persistenceMode = TTNavigatorPersistenceModeAll;
04
05 //------------注意加入下面的代码------------
06 self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
07 //------------注意加入上面的代码------------
08 navigator.window = self.window;
09
10 TTURLMap* map = navigator.URLMap;

接着在切换ViewController的时候加入代码

1 if(![navigator restoreViewControllers])
2 {
3 //打开上面设置的url
4 [navigator openURLAction:[TTURLAction actionWithURLPath:@"tt://Tab"]];
5 //------------注意加入下面的代码------------
6 self.window.rootViewController = navigator.rootViewController;
7 //------------注意加入上面的代码------------
8 }

接着在TTNavigationController.m中加入下面两行代码,TTNavigationController是Three20的源码,大家在Xcode中搜索一下这个关键字即可看到、。

1 - (BOOL)shouldAutorotate{
2 returnYES;
3 }
4 -(NSUInteger)supportedInterfaceOrientations{
5 return[self.topViewController supportedInterfaceOrientations];
6 }

如果你需要旋转的是UITabBarController那么加入如下代码

01 -(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
02 {
03 return[self.selectedViewController shouldAutorotateToInterfaceOrientation:interfaceOrientation];
04 }
05
06 -(NSUInteger)supportedInterfaceOrientations
07 {
08 return[self.selectedViewController supportedInterfaceOrientations];
09 }
10
11 -(BOOL)shouldAutorotate
12 {
13 returnYES;
14 }

如果你需要旋转的是ViewController那么加入如下代码

01 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
02 {
03 return(interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
04 }
05
06 -(NSUInteger)supportedInterfaceOrientations
07 {
08 returnUIInterfaceOrientationMaskAllButUpsideDown;
09 }
10
11 -(BOOL)shouldAutorotate
12 {
13 returnYES;
14 }

OK 这样就可以完美解决了。不过毕竟这是我们手动修改Three20 ,还是希望Three20社区尽快更新,据说FaceBook的客户端要放弃使用Three20 不知道未来Three20还能走多远,观望中!!

本文参考内容http://www.goodnewtiger.com/llf/cegeek/?p=61

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics