OC屏幕旋转相关

OC屏幕旋转分为两个部分来说,第一个是开启了Device Orientation,开启了的话,自己旋转,没开启需要自己手动处理。因为现在大多数都是用自动布局,这个一般用不到,最近在看AVFoundation相关的东西,需要用到这个,所以总结下

 第一部分,开启了自动旋转:

  • (1)注册屏幕旋转通知:
 [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
    //注册屏幕旋转通知
 [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(orientChange:)
                                                 name:UIDeviceOrientationDidChangeNotification
                                               object:[UIDevice currentDevice]];
- (void)orientChange:(NSNotification *)notification{
    UIDeviceOrientation orientation = [UIDevice currentDevice].orientation;
    if(orientation == UIDeviceOrientationPortrait){
         NSLog(@"home在下方");
        self.deviceOrientationBtn.selected = NO;
    }else if(orientation == UIDeviceOrientationPortraitUpsideDown){
         NSLog(@"home在上方");
        self.deviceOrientationBtn.selected = NO;
    }else if(orientation == UIDeviceOrientationLandscapeLeft){
         NSLog(@"home在右方");
        self.deviceOrientationBtn.selected = YES;
    }else if(orientation == UIDeviceOrientationLandscapeRight){
         NSLog(@"home在左方");
        self.deviceOrientationBtn.selected = YES;
    }

}

如果开启了之后我想手动横屏或者竖屏的话,也可以使用代码强制实现:

[[UIDevice currentDevice] setValue:[NSNumber numberWithInteger:UIInterfaceOrientationLandscapeRight]

or

 [[UIDevice currentDevice] setValue:[NSNumber numberWithInteger:UIDeviceOrientationPortrait] forKey:@"orientation"]

如果想进入改ViewController就横屏或者竖屏,退出之后恢复的话,可以在

-(void)viewWillAppear:(BOOL)animated

and

-(void)viewWillDisappear:(BOOL)animated:

两个方法中实现

第二部分,没有开启屏幕旋转,需要自己手动做一个假的来代替

(1)横屏设置的方法:

- (void)fullScreenWithDirection:(UIInterfaceOrientation)direction{
    if (direction == UIInterfaceOrientationLandscapeLeft){
        [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight animated:YES];
        [UIView animateWithDuration:0.25 animations:^{
            self.view.transform = CGAffineTransformMakeRotation(M_PI / 2);
        }completion:^(BOOL finished) {
//            [self setFullStatusBarHiddenType:_fullStatusBarHiddenType];
        }];
    }else if (direction == UIInterfaceOrientationLandscapeRight) {
        [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeLeft animated:YES];
        [UIView animateWithDuration:0.25 animations:^{
            self.view.transform = CGAffineTransformMakeRotation(0);
        }completion:^(BOOL finished) {
//            [self setFullStatusBarHiddenType:_fullStatusBarHiddenType];
        }];
    }
    self.view.frame = [[UIApplication sharedApplication]keyWindow].bounds;
    [self.view setNeedsLayout];
    [self.view layoutIfNeeded];

}

(2)竖屏还原

[UIView animateWithDuration:0.25 animations:^{
            self.view.transform = CGAffineTransformMakeRotation(0);
            self.view.frame = [[UIApplication sharedApplication]keyWindow].bounds;
            [self.view setNeedsLayout];
            [self.view layoutIfNeeded];
        }completion:^(BOOL finished) {
        }];

原文地址:https://www.cnblogs.com/hualuoshuijia/p/11548111.html

时间: 2024-10-11 04:40:53

OC屏幕旋转相关的相关文章

牛B的swift屏幕旋转经验终结者(OC统一思路)

牛B的swift屏幕旋转经验终结者(OC统一思路) 1.AppDelegate (1)定义变量 var blockRotation: Bool = false (2)定义方法 Swift代码 func application(application: UIApplication, supportedInterfaceOrientationsForWindow window: UIWindow?) -> UIInterfaceOrientationMask { if self.blockRotat

Android 设定横屏,禁止屏幕旋转,Activity重置 [更新视频播放器相关]

1. 设定屏幕方向 当指定了屏幕的方向后(非SCREEN_ORIENTATION_UNSPECIFIED),屏幕就不会自己主动的旋转了 有2中方式控制屏幕方向: 1.1 改动AndroidManifest.xml 在AndroidManifest.xml的activity中增加: 横屏: android:screenOrientation="landscape" 竖屏: android:screenOrientation="portrait" 1.2 setRequ

ios(ipad,iphone)屏幕旋转检测通用方法

在特别的场景下,需要针对屏幕旋转作特殊处理.在ios系统下实现相关的功能还是比较方便的. 我下面介绍两种方法: 1.注册UIApplicationDidChangeStatusBarOrientationNotification通知(举例:在一个viewcontroller类的viewdidload中注册该通知),示例代码如下: [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(statusBarO

IOS UIDevice & IOS检测屏幕旋转实例

一 UIDevice 简介 UIDevice类提供了一个单例实例代表当前的设备.从这个实例中可以获得的信息设备,比如操作系统名称.电池电量值(batteryLevel).电池状态(batteryState).设备的类型(model,比如iPod.iPhone等).设备的系统(systemVersion) 二 获取 UIDevice 实例 通过[UIDevice currentDevice]可以获取这个单粒对象 UIDevice *device = [UIDevice currentDevice]

iOS屏幕旋转总结

一.屏幕旋转检测方法 在特别的场景下,需要针对屏幕旋转作特殊处理.在ios系统下实现相关的功能还是比较方便的. 我下面介绍两种方法: 1.监测状态栏方向 1 /** 2 * 当手机屏幕发生左右横屏变化时,我们需根据此时的设备方向做出相应的调整 3 * 例如,在ViewController中,我们需要监控手机屏幕是否转动了,需要在通知中心中注册通知 4 */ 5 - (void)viewWillAppear:(BOOL)animated{ 6 [super viewWillAppear:anima

Android开发--教你巧妙应对屏幕旋转

Android手机支持屏幕旋转功能,手机屏幕旋转直接引发了我们的App视图变化,我们选择怎样去处理手机的翻转以及当我们的手机屏幕发生了旋转的时候我们选择何种策略去进行处理视图直接影响了我们的App的用户体验.今天我们一起来学习一下手机屏幕旋转的相关知识. 设置屏幕方向切换的属性 为了使Activity在屏幕旋转方向适应不同的场合,在AndroidManifest文件的activity标签下提供了android:screenOrientation属性用于满足不同的屏幕旋转需求. unspecifi

Android 屏幕旋转 处理 AsyncTask 和 ProgressDialog 的最佳方案

出处:http://blog.csdn.net/lmj623565791/article/details/37936275 1.概述 众所周知,Activity在不明确指定屏幕方向和configChanges时,当用户旋转屏幕会重新启动.当然了,应对这种情况,Android给出了几种方案: a.如果是少量数据,可以通过onSaveInstanceState()和onRestoreInstanceState()进行保存与恢复. Android会在销毁你的Activity之前调用onSaveInst

1016-03-父子控制器-----屏幕旋转事件的传递

1. ARC里面默认情况下所有指针都是强指针. 2. 在演示 设置两个控制器的关系为 父子控制器的关系的时候,将一个控制器B 的view加到 A控制器的view上去的时候,如果A.B不为父子控制器的关系时,旋转屏幕 的时候 B控制器是不能监听到屏幕的旋转的.只有A控制器可以监听到屏幕旋转. 3. 屏幕旋转事件是由窗口发出的.窗口会将事件传给它的根控制器. /** 监听旋转 */ - (void)willRotateToInterfaceOrientation:(UIInterfaceOrient

屏幕旋转学习笔记

加速计是整个IOS屏幕旋转的基础,依赖加速计,设备才可以判断出当前的设备方向,IOS系统共定义了以下七种设备方向: typedef NS_ENUM(NSInteger, UIDeviceOrientation) {     UIDeviceOrientationUnknown,     UIDeviceOrientationPortrait,            // Device oriented vertically, home button on the bottom     UIDev