iphone – 由于OrientationShake,UINavigationController加载视图不正确

iphone – 由于OrientationShake,UINavigationController加载视图不正确,第1张

概述背景:App有一个回家的功能.主视图仅支持纵向. 如果你比平时更加​​晃动,你所看到的视图开始旋转(这很好),但随后它会检测到一个震动,并将popViewControlller发送到主视图.当它这样做时它加载导航控制器就好了,但是(主页内容)下的视图被加载到栏后面并被拉伸(它基本上是在导航栏下方加载,因此它被拉伸) 后退按钮处理这个从风景到肖像很好(因为它不是中间过渡) 我应该如何处理这个方向更改 背景:App有一个回家的功能.主视图仅支持纵向.
如果你比平时更加​​晃动,你所看到的视图开始旋转(这很好),但随后它会检测到一个震动,并将popVIEwControlller发送到主视图.当它这样做时它加载导航控制器就好了,但是(主页内容)下的视图被加载到栏后面并被拉伸(它基本上是在导航栏下方加载,因此它被拉伸)

后退按钮处理这个从风景到肖像很好(因为它不是中间过渡)

我应该如何处理这个方向更改(从摇动),以便我可以d回到根视图控制器,而无需在导航栏下加载视图?

编辑:发生的事情是内容认为它有整个视图加载,所以它自己伸展整个屏幕,没有意识到它上面的导航栏.我可以看出,因为图像加载已拉长

增加了50美元的赏金.

编辑这里我是如何检测摇晃和d出的

- (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];}

这是我的App代表:

- (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;}
解决方法 我对你的代码感到有些困惑,所以我真的建议从一开始就开始.正如Lukya所说,没有理由重新创建HomeVIEwController.我也对“[[自我保留]自动释放]感到困惑;”位.除非你在其他地方做错事,否则这不应该是必要的.

所以我会从这开始…在应用程序中:dIDFinishLaunchingWithOptions:做这样的事情:

    - (BOol)application:(UIApplication *)application dIDFinishLaunchingWithOptions:(NSDictionary *)launchOptions     {        HomeVIEwController *home = [[[HomeVIEwController alloc] init] autorelease];        UINavigationController *navController = [[[UINavigationController alloc] initWithRootVIEwController:home] autorelease];        [self.window addSubvIEw:navController.vIEw];    }

该窗口将保留您的导航控制器,导航控制器将保留您的HomeVIEwController.

然后在motionEnded:withEvent:做类似的事情:

    - (voID)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event    {        if (event.subtype == UIEventSubtypeMotionShake)        {            [self.navigationController popVIEwControllerAnimated:YES];        }    }

那应该是它.

如果这不起作用,那么你可以提供任何其他信息吗?例如,HomeVIEwController是否在shouldautorotatetoInterfaceOrIEntation中实现(并返回YES):?如果是这样,你可以返回no,因为你的第一行显示“Home vIEw Only支持肖像”,它不会旋转吗?

编辑:willRotatetoInterfaceOrIEntation的示例:duration:和dIDRotateFromInterfaceOrIEntation:以及.

在你正在检测抖动的控制器的标题中添加一个布尔值:

    BOol isRotating;

在您的实现文件中添加我们想要覆盖的两个UIVIEwController方法 – 类似于:

    - (voID)willRotatetoInterfaceOrIEntation:(UIInterfaceOrIEntation)toInterfaceOrIEntation duration:(NSTimeInterval)duration {        [super willRotatetoInterfaceOrIEntation:toInterfaceOrIEntation duration:duration];        isRotating = YES;    }    - (voID)dIDRotateFromInterfaceOrIEntation:(UIInterfaceOrIEntation)fromInterfaceOrIEntation {        [super dIDRotateFromInterfaceOrIEntation:fromInterfaceOrIEntation];        isRotating = NO;    }

现在,为您的事件处理程序执行以下 *** 作:

    - (voID)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event    {        if (event.subtype == UIEventSubtypeMotionShake && !isRotating)        {            [self.navigationController popVIEwControllerAnimated:YES];        }    }
总结

以上是内存溢出为你收集整理的iphone – 由于Orientation / Shake,UINavigationController加载视图不正确全部内容,希望文章能够帮你解决iphone – 由于Orientation / Shake,UINavigationController加载视图不正确所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1056341.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存