`
ytwhw
  • 浏览: 98170 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

IOS应用开发之自动旋转与调整大小

阅读更多

    苹果的产品iPadiPhone都是支持自动旋转的,因而我们写的程序也要支持两种视图:纵向和横向。

默认情况下,我们写的程序都是纵向的,就像前边的几个例子中那样。如果运行以前写的程序,当把模拟器旋转,你会发现很不友好,有的控件看不见了。这个时候,自动旋转就显得很有必要了。

1、我们先不谈如何实现自动旋转,先讲讲如何让程序知道它支持哪几种旋转。

运行Xcode 4.2,新建一个Single View Application,程序名为RotateTest,其他设置如下图:



 

创建好工程后,打开的第一个页面包含如下视图:



 

我们可以在这里设置程序支持哪种旋转,只需选中那个按钮。从上图可以看出,默认情况下,iPhone程序不支持倒过来的旋转,因为如果视图是倒过来 的,而此时突然来电话,那么会很不方便,因为页面依然是倒过来的。但是,如果你创建了一个iPad程序,你回发现上图四个按钮都是选中的,即iPad程序 默认支持所有旋转。

注意,如果为程序创建了多个View Controller,那么每个View Controller都要可以设置所支持的旋转,不过,新建的View Controller设置的值必须是主View Controller的子集。

其实,我们修改上图中的按钮,实质上修改的是我们程序的plist文件,在这个工程中,是RotateTest-Info.plist文件,如下图,展开这个文件,最下面显示的就是所支持的旋转:

 

 

上面是设置支持选中的一种方法。我们也可以在代码中设定所支持的旋转。打开ViewController.m,找到shouldAutorotateToInterfaceOrientation方法,完整代码如下:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

{

    // Return YES for supported orientations

    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);

}

上面的代码表明,不支持倒转(UIInterfaceOrientationPortraitUpsideDown)。

iOS中定义了四个表示方向的变量:

UIInterfaceOrientationPortrait

UIInterfaceOrientationPortraitUpsideDown

UIInterfaceOrientationLandscapeLeft

UIInterfaceOrientationLandscapeRight

如果iOS设置旋转了,程序就会调用这个方向,如果返回YES就旋转视图,否则的话就不旋转。如果你建立了一个iPad程序,这个方法就是简单的返回YES

2、既然我们已经让程序知道支持什么旋转了,下面讲讲如何实现。

iOS中有三种方法可以实现自动旋转。

1)最简单的方法就是利用Xcode中的Size Inpector

 

 

2)在View所对应的ViewController.m中重写willAnimateRotationToInterfaceOrientation方法,在这个方法中重新设置控件的大小与位置。

3)再新建一个视图,这样,我们有两个视图了,一个纵向,一个横向。在这两个视图上设计好了之后,当旋转时根据旋转方向,调用相应的视图。

3、以下是这三个方法的简单使用。

3.1 使用Size Inpector实现自动旋转:

单击ViewController.xib,在打开的视图区域拖放两个Button在上面,分别命名为按钮上按钮下,页面布局如下图:

 

 

图中两个按钮在水平方向上是居中放置的。

运行程序,并将模拟器旋转,对比一下旋转前后的效果:

 

 

旋转之后,按钮下不见了。不过,按钮上的坐标和大小其实是没变的。

我现在想实现旋转之后两个按钮还是水平方向居中,并且还是一个在顶端、一个在底端。为实现这个,我要做以下工作:

View中选中按钮上,打开Size Inspector,把左边的红实线改成虚线:

 

 

View中选中按钮下,打开Size Inspector,把左边和上边的红实线改成虚线,下边的红虚线改成实线:

 

 

外围的红实线表示距离不变,例如上图右中下方的红实线就表示对应的控件与下方的距离不变,而其他方向会自动调整。现在运行一下并旋转模拟器,看看效果:

 

 

3.2 重写willAnimateRotationToInterfaceOrientation方法,重新设置控件的大小与位置

首先先给这两个按钮添加Outlet映射到ViewController.h,名称分别是button_1button_2



 

ViewController.m中的@end之前添加以下代码:

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval) duration {

    if (UIInterfaceOrientationIsPortrait(toInterfaceOrientation)) {

        button_1.frame = CGRectMake(124, 20, 72, 37);

        button_2.frame = CGRectMake(124, 403, 72, 37);

    } else {

        button_1.frame = CGRectMake(20, 131, 72, 37);

        button_2.frame = CGRectMake(388, 131, 72, 37);

    }

}

运行,看看效果:

 

 

3.3 创建新视图,旋转时切换视图:

我们先创建原始视图的副本,但是还是在原来的ViewController中。单击ViewController.xib,打开IB,在左边的三个图标中 选中View图标,如果用的是Mac Book,那么按住Control键,如果是虚拟机,请按住Alt键。按住后按住鼠标左键,往下拖,鼠标会变成绿色的加号。注意新视图跟原始图是并列的, 所以你要往正确的方向拖,然后松开鼠标,这样就创建了原来视图的副本:

 

 

调整新视图为横向(Landscape):

选中新视图,打开Attribute Inspector,在Orientation中选择Landscape

 

 

调整新视图中的按钮的位置,你可以按照自己的喜好设置,这里设置成如下所示:

 

 

下面,我们为这两个View建立Outlet映射,注意是View,而不是View上的控件。建立映射的方法都是一样,两个名称分别是portraitlandscape

 

 

单击ViewController.m,在@implementation那行代码的下一行添加以下语句:

#define degreesToRadians(x) (M_PI*(x)/180.0)

修改willAnimateRotationToInterfaceOrientation方法,如下:

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {

    if (toInterfaceOrientation == UIInterfaceOrientationPortrait) {

        self.view = self.portrait;

        self.view.transform = CGAffineTransformIdentity;

        self.view.transform = CGAffineTransformMakeRotation(degreesToRadians(0));

        self.view.bounds = CGRectMake(0.0, 0.0, 320.0, 460.0);

    } else if(toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft) {

        self.view = self.landscape;

        self.view.transform = CGAffineTransformIdentity;

        self.view.transform = CGAffineTransformMakeRotation(degreesToRadians(-90));

        self.view.bounds = CGRectMake(0.0, 0.0, 480.0, 300.0);

    } else if(toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) {

        self.view = self.landscape;

        self.view.transform = CGAffineTransformIdentity;

        self.view.transform = CGAffineTransformMakeRotation(degreesToRadians(90));

        self.view.bounds = CGRectMake(0.0, 0.0, 480.0, 300.0);

    }

}

运行,查看效果:

 

 

4、小结

这次讲了实现自动旋转调整大小的三种方法,第一种只要点点鼠标,很简单,但不适合复杂的视图;第二种要重新设置控件的大小和位置,代码量会比较大;第三种是创建两种视图,旋转时调用不同的视图,比较适合复杂的视图。

  • 大小: 59.1 KB
  • 大小: 12.4 KB
  • 大小: 26.2 KB
  • 大小: 23.3 KB
  • 大小: 18.4 KB
  • 大小: 56 KB
  • 大小: 20.3 KB
  • 大小: 19.5 KB
  • 大小: 58.6 KB
  • 大小: 57.4 KB
  • 大小: 25.2 KB
  • 大小: 15.7 KB
  • 大小: 55 KB
  • 大小: 57.2 KB
  • 大小: 37 KB
  • 大小: 13.8 KB
分享到:
评论

相关推荐

    IOS应用源码之自动旋转.zip

    在iOS应用开发中,自动旋转是一项重要的功能,它允许用户根据设备的方向改变应用程序的界面布局。这个"IOS应用源码之自动旋转.zip"文件很可能是包含了一个或多个示例项目,用于演示如何在iOS应用中实现屏幕自动旋转...

    IOS应用源码之自动旋转 .rar

    在iOS应用开发中,"自动旋转"涉及到用户界面(UI)如何根据设备的方向进行自动调整。这个主题涵盖了许多iOS SDK中的关键概念和技术,包括设备感应、视图控制器的旋转行为、Auto Layout以及Size Classes等。以下是对...

    IOS应用源码——自动旋转.zip

    在iOS开发中,"自动旋转"是指应用能够根据设备的方向自动调整用户界面布局的功能。这个压缩包"IOS应用源码——自动旋转.zip"显然包含了实现这一功能的源代码。让我们深入探讨一下iOS应用中自动旋转涉及到的技术点和...

    IOS应用源码——自动旋转.rar

    在iOS开发中,"自动旋转"是指应用能够根据设备的方向自动调整用户界面布局,以便用户在横屏或竖屏模式下都有良好的体验。这个"IOS应用源码——自动旋转.rar"压缩包很可能是包含了实现这一功能的源代码示例。在iOS...

    屏幕自动旋转和调节大小

    屏幕自动旋转涉及到设备方向的检测和应用界面的适配,而大小调节则与设备分辨率、屏幕尺寸以及用户交互息息相关。接下来,我们将深入探讨这两个核心知识点。 首先,我们来看屏幕自动旋转。在iOS中,系统通过...

    IOS应用源码Demo-自动旋转-毕设学习.zip

    在iOS应用开发中,"自动旋转"是一个关键的用户体验特性,允许用户在设备的不同方向上使用应用程序。这个"IOS应用源码Demo-自动旋转-毕设学习.zip"压缩包提供了有关如何实现这一功能的源代码示例,对于正在进行毕业...

    《Iphone开发基础教程》第五章 自动旋转和调整大小 例子

    总之,自动旋转和调整大小是iOS应用开发中的关键环节,确保了应用在不同设备和状态下都能提供一致且舒适的用户体验。通过深入学习《iPhone开发基础教程》第五章的内容,开发者能够熟练掌握这些技巧,从而提升应用的...

    ios应用源码之动画 2018127

    在iOS应用开发中,动画是提升用户体验和视觉效果的关键元素。本资料包“ios应用源码之动画 2018127”提供了一套关于iOS应用动画的源代码,帮助开发者深入理解和实践iOS平台上的动画技术。下面将详细探讨iOS动画的几...

    ios5旋转屏幕

    在iOS开发中,屏幕旋转是用户体验的重要组成部分。iOS 5引入了新的屏幕旋转管理机制,与之前的版本有所不同。本文将详细解析iOS 5中的屏幕旋转处理,并基于提供的“LandscapeDemoIos5”项目文件进行讲解。 首先,...

    ios应用源码之控件的使用 2018128

    在iOS应用开发中,控件(Controls)是构建用户界面(UI)的关键元素。它们允许用户与应用程序进行交互,提供视觉反馈,并执行特定的操作。在这个主题“ios应用源码之控件的使用 2018128”中,我们将深入探讨iOS中的...

    ios旋转坐标设置

    在iOS应用开发过程中,为了提供更好的用户体验,经常需要处理屏幕方向变化时界面元素(如按钮、文本框等)的布局调整。本文将详细介绍如何通过编程方式来实现屏幕旋转时控件布局的自适应调整,具体包括屏幕旋转支持...

    iOS9应用开发基础教程

    - **安装Xcode7.0**:Xcode是iOS应用开发的主要集成开发环境(IDE),安装最新版本的Xcode对于开发者来说至关重要。 #### 三、学习资源与建议 - **获取相关资料和软件**:通过官方提供的联系方式,获取必要的学习...

    ios-collection实现旋转效果.zip

    在iOS开发中,集合视图(UICollectionView)是一种强大的布局组件,可以用来展示各种自定义的...通过学习这个项目,开发者可以提升自己在自定义UICollectionView布局和交互方面的技能,从而创建更加生动有趣的iOS应用。

    iOS Object-c 实现界面横竖屏切换源代码

    在iOS开发中,Objective-C是苹果官方推荐的编程语言之一,用于构建iPhone、iPad等iOS设备上的应用程序。本文将深入探讨如何使用Objective-C实现界面的横竖屏切换,并提供相关源代码分析。 首先,理解iOS中的屏幕...

    IOS应用源码之【应用】-iPad Multi-Touch.rar

    4. **Auto Layout与Size Classes**:为了适配不同尺寸的iPad屏幕,开发者通常会利用Auto Layout进行界面布局,它能自动调整UI元素的位置和大小以适应屏幕变化。Size Classes则允许开发者为不同屏幕方向和设备类型...

    ios设备旋转走的代理(代码附加输出口集合)

    1. `- (BOOL)shouldAutorotate`:询问当前视图控制器是否应自动旋转。默认返回YES,表示接受所有方向的旋转。如果希望限制旋转,可以在这里进行判断。 2. `- (UIInterfaceOrientationMask)...

    IOS应用源码——自动为textView添加编辑框.rar

    在iOS应用开发中,UI设计和用户体验是至关重要的部分,特别是在文本输入方面。这个压缩包“IOS应用源码——自动为textView添加编辑框.rar”提供了一个解决方案,它可以帮助开发者为textView自定义一个编辑框,提升...

    ios demo,UIInterfaceOrientation,屏幕旋转的实例

    总之,这个“ios demo, UIInterfaceOrientation, 屏幕旋转的实例”是一个非常实用的学习资源,它帮助开发者了解如何在iOS应用中处理屏幕旋转,包括监听设备方向变化、设置视图控制器的旋转行为以及调整界面布局。...

    iOS 自动布局及适配iPhone6

    iOS自动布局及适配iPhone6的知识点涵盖了iOS应用开发中界面布局与适配的关键技术,主要包括自动布局(Auto Layout)的使用、屏幕分辨率和像素的处理,以及使用Size Classes来适配不同尺寸的屏幕。 1. 自动布局...

Global site tag (gtag.js) - Google Analytics