我正在尝试在我的gl iOS应用程序中支持横向模式。我有一个窗口,一个gl视图和一个带有一个方法的视图控制器,shouldAutorotateToInterfaceOrientation,它返回YES。这就是我设置它们的方式:
window = [[UIWindow alloc] initWithFrame:rect];
GLView *glView = [[GLView alloc] initWithFrame:rect];
glView.delegate = self;
view_controller = [ViewController alloc];
view_controller.view = glView;
window.rootViewController = view_controller;
这发生在方法applicationDidFinishLaunching上。问题是对于纵向模式,方法shouldAutorotateToInterfaceOrientation仅被调用一次。我仍然在我的视图中获取事件,但自动旋转的方法永远不会再被调用。
我设置正确吗?没有nib文件,只是代码。
感谢。
答案 0 :(得分:0)
你应该在你的ViewController实例上调用init(它是一个UIViewController子类吗?)
您应该覆盖以下UIViewController方法
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
对autorotate的调用并不意味着将发生旋转,这在UIViewController类引用中有解释
默认情况下,UIViewController类以纵向模式显示视图 只要。要支持其他方向,您必须覆盖 shouldAutorotateToInterfaceOrientation:方法并返回YES为any 您的子类支持的方向。如果自动调整属性 您的视图配置正确,这可能是您所需要做的。 但是,UIViewController类为您提供了额外的挂钩 根据需要实施其他行为。
暂时关闭不需要或可能的功能 否则在方向改变期间会导致问题,你可以 覆盖willRotateToInterfaceOrientation:duration:方法和 在那里执行所需的操作。然后你可以覆盖 didRotateFromInterfaceOrientation:方法并使用它来重新启用它们 一旦方向改变完成,就会有功能。
要为方向更改添加动画,请覆盖 willAnimateRotationToInterfaceOrientation:duration:方法和执行 那里你的动画。