求解ios啪啪的ios街机模拟器器怎么调成竖屏

竖屏iOS应用中强制部分页面横屏的方法 - 简书
竖屏iOS应用中强制部分页面横屏的方法
今天在使用B站的ijkmedia做视屏播放的功能,视频播放的那个页面我想强制让他横屏。当前的应用本来是一个竖屏应用。查了各种网站方法很多种,但是很多都有各种问题,不符合当前的场景。最终找到了一个解决办法。
1 UINavagationController
由于当前的屏幕状态是通过UINavagationController来控制的,所以我们首先需要自定义一个UINavagationController:
@implementation XddBaseNavagationVC
- (BOOL)shouldAutorotate
return [self.viewControllers.lastObject shouldAutorotate];
- (UIInterfaceOrientationMask)supportedInterfaceOrientations
return [self.viewControllers.lastObject supportedInterfaceOrientations];
这么做是为了当从横屏页面返回之后,能够让页面保持竖屏(其实是去获取返回之后VC的屏幕状态)。
2 UITabBarViewController
因为当前的应用是一个tabbar应用,所以我们也需要保证tabbar能够正常的显示。我使用了一个分类来处理这个问题,tabbarvc的状态依赖当前选中的VC的属性:
@implementation LCTabBarController (Autorotate)
- (BOOL)shouldAutorotate
return [self.selectedViewController shouldAutorotate];
- (UIInterfaceOrientationMask)supportedInterfaceOrientations
return [self.selectedViewController supportedInterfaceOrientations];
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
return [self.selectedViewController preferredInterfaceOrientationForPresentation];
然后在我的整个应用中,BaseVC是所有的VC的基类,通过这个我统一的处理了一些问题,因为当前的应用是竖屏的,所以在BaseVC中实现如下几个函数,保证VC竖屏显示:
// 只支持竖屏
- (BOOL)shouldAutorotate {
return NO;
- (UIInterfaceOrientationMask)supportedInterfaceOrientations
return UIInterfaceOrientationMaskP
-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
return UIInterfaceOrientationP
4 横屏VC的处理
我的横屏的VC也是继承了BaseVC,如果不处理,也会竖屏。通过以下代码进行特殊处理,覆盖BaseVC中的几个方法:
- (BOOL)shouldAutorotate {
return YES;
- (UIInterfaceOrientationMask) supportedInterfaceOrientations {
return UIInterfaceOrientationMaskLandscapeR
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
return UIInterfaceOrientationLandscapeR
这样就能让他正确的横屏显示,并且返回回去仍然是竖屏。
当在弹出横屏的VC的时候一定要注意以下几点:
当前的方式只支持模态弹出。push是会出问题的。2.弹出方法,必须要用XddBaseNavagationVC进行包装才可以使用,否则会导致返回之后竖屏的页面变成横屏。
UINavigationController *nav = [[XddBaseNavagationVC alloc]initWithRootViewController:[[IJKVideoViewController alloc] initWithURL:url]];
[viewController presentViewController:nav animated:YES completion:completion];IOS学习(6)
1.新建项目,默认屏幕可以旋转以及旋转方向。
2.如果项目中所有页面不支持旋转,则直接勾掉就行了。
3.重点来了:如果想实现部分页面竖屏,个别的页面横屏怎么办?(比如播放页面横屏)
&复写UIViewcontroller的下面几个模板函数。
- (BOOL)shouldAutorotate&NS_AVAILABLE_IOS(6_0);
& &当前viewcontroller是否支持转屏
- (NSUInteger)supportedInterfaceOrientations;
& &当前viewcontroller支持哪些转屏方向
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation&
& &当前viewcontroller默认的屏幕方向
& & 1)如果目标ViewController是由NavigationController引用的,则只能在NavigationController中重写上述方法,反之在目标ViewController中重写则无效。
& & 2)下边说一下具体的做法:
& & & &1*自定义NavigationController。
& & & &2*重写上述的三个模板函数。
& & & &3*在- (BOOL)shouldAutorotate方法里判断哪个类需要旋转,哪个类不需要;
在APPDelegate.h文件中增加属性:是否支持横屏
/*** 是否允许横屏的标记 */@property
(nonatomic,assign)BOOL allowR
在APPDelegate.m文件中增加方法,控制全部不支持横屏
-(NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {
if (self.allowRotation) {
return UIInterfaceOrientationMaskA
return UIInterfaceOrientationMaskP
这样在其他界面想要横屏的时候,我们只要控制allowRotation这个属性就可以控制其他界面进行横屏了。
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
appDelegate.allowRotation = YES;
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:2161次
排名:千里之外
原创:10篇
(2)(1)(2)(2)(2)(1)(3)[iOS]代码控制APP中视图横屏/竖屏切换 - 简书
[iOS]代码控制APP中视图横屏/竖屏切换
很多时候,项目中都有这样的需求:APP中以竖屏为主,个别界面会要求横屏显示,或者要根据用户的手机朝向自动切换横竖屏;下面就来详细讲解,在项目中怎么使用代码来控制APP的界面转换.首先,要想APP支持多个方向,需要在工程进行设置支持的朝向:在General--&Deployment Info--&Device Orientation中进行设置
设置APP支持的手机方向
这样,就可以在项目中使用代码来控制页面的朝向了,在这之前,需要知道控制视图是否能够自动旋转,以及支持的朝向,是通过哪些方法来控制的?其实,主要使用的是下面三个方法:
// New Autorotation support.
//是否自动旋转,返回YES可以自动旋转
- (BOOL)shouldAutorotate NS_AVAILABLE_IOS(6_0) __TVOS_PROHIBITED;
//返回支持的方向
- (UIInterfaceOrientationMask)supportedInterfaceOrientations NS_AVAILABLE_IOS(6_0) __TVOS_PROHIBITED;
// Returns interface orientation masks.
//这个是返回优先方向
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation NS_AVAILABLE_IOS(6_0) __TVOS_PROHIBITED;
一般情况下,实现前两个方法即可!这些都是UIViewController的实例方法,直接在需要设置的控制器内重写上面的方法即可;有时候,你会发现,只有在APP启动时出现的第一个界面内重写上面的两个方法,会有效果;而在其他的界面重写,并没有效果.这是因为,程序启动后的第一个界面是程序的跟视图控制器,而这些设置,必须是影响了跟视图中的相应设置,才会有效果;假如,你在跟视图中进行了如下设置:
- (BOOL)shouldAutorotate{
return NO;
那么,在整个项目中,无论你如何设置,都不会有自动旋转屏幕的效果.综上可知,如果要改变某个视图屏幕方向,需要告诉跟视图,在跟视图中修改为相应的设置即可;所以,问题来了,怎么告诉跟视图呢?这要视情况而定:
1.当前viewController就是跟视图控制器
这种情况最简单,直接在控制器中重写上面的方法,设置是否支持自动旋转,以及支持的方向即可:
- (BOOL)shouldAutorotate{
return YES;
#if __IPHONE_OS_VERSION_MAX_ALLOWED & __IPHONE_9_0
- (NSUInteger)supportedInterfaceOrientations
- (UIInterfaceOrientationMask)supportedInterfaceOrientations
return UIInterfaceOrientationMaskA
像上面我设置为支持自动旋转,支持所有的朝向;这种方式, 切换视图的方式主要是模态(present), 只需要在相应的UIViewController里重写上面的方法即可.但是这种情况很少见...对应的demo为:中的Rotation-UIViewController
2.项目的跟视图控制器是导航(UINavigationController)
这种情况比较常见,也很简单;一般使用的导航的时候,都不会去直接使用系统的UINavigationController,而会定义一个他的子类,做一些公共的设置:
#import &UIKit/UIKit.h&
@interface BaseNaviViewController : UINavigationController
然后在导航的viewController里面重写上面的三个方法,这里也有两种方式来控制:
2.1 设置最后一个push的viewController
这种方式,主要是用在,当push到某个视图控制器时,要求他能够支持自动旋转,或者强制转为横屏;这里主要用到了导航的viewControllers属性,这是一个数组,数组的最后一个元素,就是最后push进去的viewController,所以,实现代码如下:
-(BOOL)shouldAutorotate
return [[self.viewControllers lastObject] shouldAutorotate];
#if __IPHONE_OS_VERSION_MAX_ALLOWED & __IPHONE_9_0
- (NSUInteger)supportedInterfaceOrientations
- (UIInterfaceOrientationMask)supportedInterfaceOrientations
return [[self.viewControllers lastObject] supportedInterfaceOrientations];
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
return [[self.viewControllers lastObject] preferredInterfaceOrientationForPresentation];
到这里还没有结束,这里只是获取到了最后一个push的viewController,然后用它去调用了相应的方法,具体的方法实现,还是需要在哪个viewController里进行设置的,也就是在需要特殊设置的viewController里重写上面的方法:
-(BOOL)shouldAutorotate
return YES;
#if __IPHONE_OS_VERSION_MAX_ALLOWED & __IPHONE_9_0
- (NSUInteger)supportedInterfaceOrientations
- (UIInterfaceOrientationMask)supportedInterfaceOrientations
return UIInterfaceOrientationMaskPortraitUpsideD
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
return UIInterfaceOrientationPortraitUpsideD
其实这样也就是告诉跟视图控制器,这个界面我要特殊设置一下;对应的demo为: 中的Rotation-UINavigationController
2.2设置指定的控制器
第一种方法是,只要push进去一个视图控制器,都可以进行相应的设置,而这种方法是只针对特定的控制器进行设置,例如这里,我需要把SecondViewController单独设置为支持横屏,只需要将第一种方法中的导航里的相应代码做如下修改:
-(BOOL)shouldAutorotate
if ([[self.viewControllers lastObject]isKindOfClass:[SecondViewController class]]) {
return YES;
return NO;
#if __IPHONE_OS_VERSION_MAX_ALLOWED & __IPHONE_9_0
- (NSUInteger)supportedInterfaceOrientations
- (UIInterfaceOrientationMask)supportedInterfaceOrientations
if ([[self.viewControllers lastObject]isKindOfClass:[SecondViewController class]]) {
return UIInterfaceOrientationMaskLandscapeL
return UIInterfaceOrientationMaskP
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
if ([[self.viewControllers lastObject]isKindOfClass:[SecondViewController class]]) {
return UIInterfaceOrientationLandscapeL
return UIInterfaceOrientationP
这样的好处是,可以控制指定的视图控制器,也不用在指定的视图控制器内再重写上面的方法;坏处就是,如果需要控制的视图控制器比较多的话,加的判断会多很多;没有方式一灵活;对应的demo为: 中的Rotation-UINavigationController副本
3.跟视图控制器是UITabbarController
这种情况比较常见,项目的跟视图控制器是一个UITabBarController,这种情况的实现相对来说要复杂一些,但是,明白了原理,总是有方法来实现的.归根结底,也就是告诉跟视图,我这个界面需要支持旋转了;由于,在UITabBarController里直接获取到UIViewController比较困难,所以这里我采用通知的形式,来获取相应的设置状态;首先,设置一个全局的BOOL值,用于接收通知发送的参数:
#import &UIKit/UIKit.h&
@interface BaseTabBar : UITabBarController
BOOL shouldA
然后注册一个通知:
//注册旋转屏幕的通知
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(autorotateInterface:) name:@"InterfaceOrientationNotification" object:nil];
实现通知方法:
-(void)autorotateInterface:(NSNotification *)notifition
shouldAutorotate = [notifition.object boolValue];
然后在重写的方法里加入判断:
@return 是否支持旋转
-(BOOL)shouldAutorotate
NSLog(@"======%d",shouldAutorotate);
return shouldA
适配旋转的类型
@return 类型
-(UIInterfaceOrientationMask)supportedInterfaceOrientations
if (!shouldAutorotate) {
return UIInterfaceOrientationMaskP
return UIInterfaceOrientationMaskAllButUpsideD
这里我直接将支持的方向写死了,只是判断了一下是否支持自动旋转屏幕,如果需要将支持的方向传过来,可以修改通知携带的参数;最后在需要自动转屏的控制器内发送通知:
[[NSNotificationCenter defaultCenter] postNotificationName:@"InterfaceOrientationNotification" object:@"YES"];
对应的demo为: 中的Rotation-UITabBarController
PS新增: 关于何时发送通知例如有这样的需求: A竖屏, 不能自动旋转, B 可横屏可竖屏可自动旋转, 而且在从B回到A的时候, 如果不是竖屏, 强制转为竖屏, 这就用到了下面强制转屏的方法;我们在使用的时候肯定是在B的viewWillAppear方法里发送通知告诉跟视图要自动旋转, 而在离开这个视图时, 就有可能会在viewWillDisappear方法里发送不能自动旋转的通知, 这样是不能实现效果的, 应该放在viewDidDisappear方法里发送;为严谨起见, 建议在viewDidAppear方法里发送可以自动旋转的通知, 在viewDidDisappear方法里发送不可以自动选择的通知.这里使用的通知来告知跟视图是否自动旋转, 也可以使用NSUserDefaults 来传递这个值, 或者单例都可以.
到此,对于控制屏幕的旋转及方向,基本就介绍完了,如果有不足或者不对的地方,还请指正;如果你有更好的方式实现同样的效果,还请不吝赐教...
最后介绍一个强制旋转屏幕的方法,这个方法可以在进入某个视图时,强制转成你需要的屏幕方向,用的比较多的是在一个竖屏的应用中强制转换某一个界面为横屏(例如播放视频):
PS: 这个方法的使用有个前提, 一定是在跟视图的-(BOOL)shouldAutorotate返回值为YES的时候才有效.
//强制旋转屏幕
- (void)orientationToPortrait:(UIInterfaceOrientation)orientation {
SEL selector = NSSelectorFromString(@"setOrientation:");
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[UIDevice instanceMethodSignatureForSelector:selector]];
[invocation setSelector:selector];
[invocation setTarget:[UIDevice currentDevice]];
[invocation setArgument:&val atIndex:2];//前两个参数已被target和selector占用
[invocation invoke];
使用的时候,只需要把你需要旋转的方向传过去即可!有一点需要注意:从A进入B的时候, 把B强制转换成横屏,返回的时候,需要在A出现的时候再转换为原来的方向,不然会有问题;个人建议可以在B的viewWillAppear调用这个方法,转换屏幕(例如转换为横屏),然后在A的viewWillAppear中转换回来; 如果使用通知来告诉跟视图是否可以自动旋转, 这个方法要在通知发送之后调用.
具体效果及设置, 可参考demo:iOS小游戏竖屏切换成横屏_麻烦精741_新浪博客
iOS小游戏竖屏切换成横屏
&走上iOS这条路,已经大三的我,希望能在这一年内,把iOS学好,作为自己以后的一个出路,我根据一个小游戏demo来入门,原来也接触过一些,希望这次能系统的学习:
为了让从竖屏模式切换为横屏模式,我们得完成三件事情:
让Main.storyboard中的视图使横屏显示
&&在storyboard中点击view
controller,然后切换到右侧的inspector面板,然后点击Attributes Inspector。这里我们找到Simulated Metrics部分下的Orientation 设置,然后把它从Inferred修改为Landscape。 然后手动调整下view上的部件。
& &实际上我们还有
件事情忘了做。当应用启动的时候,默认情况下它假定应该是竖屏显示的,然后当我们的视图控制器加载后,它才意识到弄错了,于是突然切换成横屏显示。这是因为在CrazyDragViewController视图控制器激活之前,iOS并不知道我们的会是横屏显示的。&
&解决方法很简单:点击Project
Navigator(项
导航)顶部的CrazyDrag图标,此时Xcode窗口的主板会显示关于项目的一些设置。在TARGETS下
点击CrazyDrag,然后切换到General选项
在Deployment Info下有个
Device Orientations。上
默认选中了三个,我们要取消选中Portrait这个选项。现在再点Run按钮,
切应该正常了。&
​ 2.
更改CrazyDragViewController.m中的代码,允许视图控制器
动旋转到横屏模式
更改设备的”Supported Device
Orientations”设置。&
注:为了在storyboard中更好的看到标签的位置,也为了更加方便的移动和调整位置,我们可以让storyboard显示标签的边界:点击Xcode上
的菜单栏,选择Editor--&Canvas---&Show
Bounds Rectangles。
博客等级:
博客积分:0
博客访问:147
关注人气:0
荣誉徽章:

我要回帖

更多关于 街机模拟器ios版下载 的文章

 

随机推荐