之前一直都是在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中修改如下代码
02 | TTNavigator* navigator = [TTNavigator navigator]; |
03 | navigator.persistenceMode = TTNavigatorPersistenceModeAll; |
06 | self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; |
08 | navigator.window = self.window; |
10 | TTURLMap* map = navigator.URLMap; |
接着在切换ViewController的时候加入代码
1 | if (![navigator restoreViewControllers]) |
4 | [navigator openURLAction:[TTURLAction actionWithURLPath:@ "tt://Tab" ]]; |
6 | self.window.rootViewController = navigator.rootViewController; |
接着在TTNavigationController.m中加入下面两行代码,TTNavigationController是Three20的源码,大家在Xcode中搜索一下这个关键字即可看到、。
1 | - ( BOOL )shouldAutorotate{ |
4 | -(NSUInteger)supportedInterfaceOrientations{ |
5 | return [self.topViewController supportedInterfaceOrientations]; |
如果你需要旋转的是UITabBarController那么加入如下代码
01 | -( BOOL )shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation |
03 | return [self.selectedViewController shouldAutorotateToInterfaceOrientation:interfaceOrientation]; |
06 | -(NSUInteger)supportedInterfaceOrientations |
08 | return [self.selectedViewController supportedInterfaceOrientations]; |
11 | -( BOOL )shouldAutorotate |
如果你需要旋转的是ViewController那么加入如下代码
01 | - ( BOOL )shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation |
03 | return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); |
06 | -(NSUInteger)supportedInterfaceOrientations |
08 | return UIInterfaceOrientationMaskAllButUpsideDown; |
11 | -( BOOL )shouldAutorotate |
OK 这样就可以完美解决了。不过毕竟这是我们手动修改Three20 ,还是希望Three20社区尽快更新,据说FaceBook的客户端要放弃使用Three20 不知道未来Three20还能走多远,观望中!!
本文参考内容 http://www.goodnewtiger.com/llf/cegeek/?p=61