【发布时间】:2011-07-13 18:22:07
【问题描述】:
背景:应用有摇一摇回家功能。主页视图 仅支持纵向。 如果您比平时更用力地摇动,您所在的视图会开始旋转(这很好),但随后它会检测到摇动并对主视图执行 popViewController。当它这样做时,它加载导航控制器就好了,但是(主页内容)下的视图被加载到栏后面并被拉伸(它基本上是在导航栏下面加载,所以它被拉伸了)
后退按钮可以很好地处理从横向到纵向(因为它不是中间过渡)
我应该如何处理这种方向变化(从摇动),以便我可以弹回根视图控制器,而无需在导航栏下加载视图?
编辑:发生的事情是内容认为它要加载整个视图,所以它会拉伸自己以占据整个屏幕,而没有意识到它上面有一个导航栏。我可以知道,因为图像加载被拉长了
增加了 50 的赏金。
编辑这里是我检测震动和爆裂的方式
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
if ( event.subtype == UIEventSubtypeMotionShake )
{
UINavigationController *navController = self.navigationController;
[[self retain] autorelease];
HomeViewController *home = [[HomeViewController alloc]init];
[navController popViewControllerAnimated:YES];
home.title =@"Home View Controller";
[home release];
}
if ( [super respondsToSelector:@selector(motionEnded:withEvent:)] )
[super motionEnded:motion withEvent:event];
}
这是我的应用代理:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
navController = [[UINavigationController alloc]init];
[self.window addSubview:navController.view];
HomeViewController *home = [[HomeViewController alloc]init];
[[self home] setFrame:[[UIScreen mainScreen] applicationFrame]];
我将在此处添加一个模型。
普通视图:
摇晃/弹出后的拉伸视图:
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
}
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return YES;
}
【问题讨论】:
-
您是如何创建视图的?
-
主视图(在栏下方,包含内容)由 ViewController 和 XIB 完成。 UINavigationBar 正在 App Delegate 中创建。
-
它的尺寸是否适合它进入的间隙?
-
并非如此。 XIB 配置为 320x480。您是否建议我以某种方式使视图实际上是 320 x(480-44-Statusbar 高度?)。现在它可以工作,并且它的设计是通过在加载时允许底部的一些边距空间被切断来工作
-
我将在周末亲自为您在 IB 中进行挖掘,因为我现在不在我的电脑前。此刻只是抓着稻草......
标签: iphone ios xcode uinavigationbar popviewcontroller