use*_*772 5 rotation uinavigationcontroller viewcontroller navigationcontroller ios
首先,这不是重复.我在SO上查看了与此相关的所有问题,但这些问题对我来说都不起作用.希望这只是因为我是iOS开发的新手,但我怀疑在我的情况下这是不可能的.我附加了一个带有视图控制器的图片,我想要禁用旋转.
我已经尝试过:对我要禁用旋转的视图控制器进行子类化,并shouldAutoRotate通过将其设置为NO 来使用该方法.显然这不起作用,因为它是导航控制器,指示其视图控制器是否可以旋转.所以,我UINavigationController在故事板中继承并使用了这个类而不是默认的导航控制器.在这堂课中,我已经设定shouldAutoRotate为NO.它仍然无法正常工作.真的不知道我做错了什么.
当我使用shouldAutoRotate设置为NO的视图控制器类扩展根视图控制器时,它会禁用整个应用程序的旋转.... 这不是我想要的.我只希望为图片中圈出的视图控制器禁用旋转.

提前致谢!
Ozg*_*hin 11
添加AppDelegate.h
@property (nonatomic , assign) bool blockRotation;
Run Code Online (Sandbox Code Playgroud)
AppDelegate.m
-(NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
if (self.blockRotation) {
return UIInterfaceOrientationMaskPortrait;
}
return UIInterfaceOrientationMaskAll;
}
Run Code Online (Sandbox Code Playgroud)
在视图控制器中,您要禁用旋转
- (void)viewDidLoad
{
[super viewDidLoad];
AppDelegate* shared=[UIApplication sharedApplication].delegate;
shared.blockRotation=YES;
}
-(void)viewWillDisappear:(BOOL)animated{
AppDelegate* shared=[UIApplication sharedApplication].delegate;
shared.blockRotation=NO;
}
Run Code Online (Sandbox Code Playgroud)
感谢@ozgur为我工作的修复程序.我会'投票',但显然我不够好(无论如何!)投票是否有效.无论如何,这里是Swift:
在AppDelegate.swift中:
class AppDelegate: UIResponder, UIApplicationDelegate {
var blockRotation: Bool = false
func application(application: UIApplication, supportedInterfaceOrientationsForWindow window: UIWindow?) -> Int {
if (self.blockRotation) {
println("supportedInterfaceOrientations - PORTRAIT")
return Int(UIInterfaceOrientationMask.Portrait.rawValue)
} else {
println("supportedInterfaceOrientations - ALL")
return Int(UIInterfaceOrientationMask.All.rawValue)
}
}
Run Code Online (Sandbox Code Playgroud)
在要阻止旋转的ViewController中,将UIApplicationDelegate添加到您的类中......
class LoginViewController: UIViewController, UITextFieldDelegate, UIApplicationDelegate {
Run Code Online (Sandbox Code Playgroud)
然后创建对AppDelegate的引用...
var appDelegate = UIApplication.sharedApplication().delegate as AppDelegate
Run Code Online (Sandbox Code Playgroud)
在viewDidLoad中,设置appDelegate.blockRotation = true:
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
appDelegate.blockRotation = true
}
Run Code Online (Sandbox Code Playgroud)
在viewWillAppear中,设置方向以强制设备进入所选方向(本例中为纵向):
override func viewWillAppear(animated: Bool) {
let value = UIInterfaceOrientation.Portrait.rawValue
UIDevice.currentDevice().setValue(value, forKey: "orientation")
}
Run Code Online (Sandbox Code Playgroud)
然后在viewWillDisappear或prepareForSegue中,设置appDelegate.blockRotation = false:
override func viewWillDisappear(animated: Bool) {
appDelegate.blockRotation = false
}
Run Code Online (Sandbox Code Playgroud)
在阅读本网站上的其他解决方案数小时后,这对我来说非常适合我(导航控制器中的多视图控制器)方案.再次感谢@ ozgur - 如果可以,我会投票给你答案!
快乐的小道!
您必须检查根视图控制器当前顶部控制器是否允许旋转,并在supportedInterfaceOrientations方法中返回YES或NO。因此,它应该类似于根控制器中的以下代码(根据您的情况调整代码):
- (NSUInteger)supportedInterfaceOrientations
{
return [self.navigationController.topViewController supportedInterfaceOrientations];
}
Run Code Online (Sandbox Code Playgroud)
然后在每个视图控制器中添加支持的界面方向,例如:
- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskPortrait;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5578 次 |
| 最近记录: |