【 Beginning iOS 7 Development《精通iOS7开发》】05 Autorotation and Autosizing

一、旋转后相对位置不变

二、旋转后相对位置变化

 2.1默认:

 2.2调整后

三、小结

 3.1 在APP级别设置支持哪些方向:

 3.2 在viewController(xlib)级别设置支持哪些方向:

  

#import "JAViewController.h"

@interface JAViewController ()

@end

@implementation JAViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
	// Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

//重写这个方法
-(NSUInteger)supportedInterfaceOrientations
{
//    return (UIInterfaceOrientationMaskPortrait|UIInterfaceOrientationMaskLandscapeLeft|UIInterfaceOrientationMaskPortraitUpsideDown);
//    return UIInterfaceOrientationMaskAll;
    return (UIInterfaceOrientationMaskLandscapeRight|UIInterfaceOrientationMaskLandscapeLeft|UIInterfaceOrientationMaskPortraitUpsideDown);
}

@end

 3.3 使用约束Contstraints



    3.4 当上面的Contraints办法满足不了时,关闭掉它,让后在ViewController.m中通过代码实现。



//
//  JAViewController.m
//  Restructure
//
//  Created by jason on 14-7-16.
//  Copyright (c) 2014年 jason. All rights reserved.
//

#import "JAViewController.h"

@interface JAViewController ()
@property (weak, nonatomic) IBOutlet UIButton *actionButton1;
@property (weak, nonatomic) IBOutlet UIButton *actionButton2;
@property (weak, nonatomic) IBOutlet UIButton *actionButton3;
@property (weak, nonatomic) IBOutlet UIButton *actionButton4;
@property (weak, nonatomic) IBOutlet UIView *contentView;

@end

@implementation JAViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
	// 从这里开始
    UIApplication *app = [UIApplication sharedApplication];
    UIInterfaceOrientation currentOrientation = app.statusBarOrientation;
    [self doLayoutForOrientation:currentOrientation];//跳转到实际处理处
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

//从这里开始
-(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
  {
      [self doLayoutForOrientation:toInterfaceOrientation];
  }

//确定当前方向
-(void)doLayoutForOrientation:(UIInterfaceOrientation)orientation
{
    if (UIInterfaceOrientationIsPortrait(orientation)) {
        [self layoutPortrait];
    } else {
        [self layoutLandscape];
    }
}

static const CGFloat buttonHeight = 40;
static const CGFloat buttonWidth = 120;
static const CGFloat spacing = 20;

//竖向处理
- (void)layoutPortrait {
    CGRect b = self.view.bounds;
    CGFloat contentWidth = CGRectGetWidth(b) - (2 * spacing);
    CGFloat contentHeight = CGRectGetHeight(b) - (4 * spacing) -
    (2 * buttonHeight);
    self.contentView.frame = CGRectMake(spacing, spacing,
                                        contentWidth, contentHeight);
    CGFloat buttonRow1y = contentHeight + (2 * spacing);
    CGFloat buttonRow2y = buttonRow1y + buttonHeight +  spacing;
    CGFloat buttonCol1x = spacing;
    CGFloat buttonCol2x = CGRectGetWidth(b) - buttonWidth - spacing;
    self.actionButton1.frame = CGRectMake(buttonCol1x, buttonRow1y,
                                          buttonWidth, buttonHeight);
    self.actionButton2.frame = CGRectMake(buttonCol2x, buttonRow1y,
                                          buttonWidth, buttonHeight);
    self.actionButton3.frame = CGRectMake(buttonCol1x, buttonRow2y,
                                          buttonWidth, buttonHeight);
    self.actionButton4.frame = CGRectMake(buttonCol2x, buttonRow2y,
                                          buttonWidth, buttonHeight);
}

//横向处理
- (void)layoutLandscape {
    CGRect b = self.view.bounds;
    CGFloat contentWidth = CGRectGetWidth(b) - buttonWidth - (3 * spacing);
    CGFloat contentHeight = CGRectGetHeight(b) - (2 * spacing);
    self.contentView.frame = CGRectMake(spacing, spacing,
                                        contentWidth, contentHeight);
    CGFloat buttonX = CGRectGetWidth(b) - buttonWidth - spacing;
    CGFloat buttonRow1y = spacing;
    CGFloat buttonRow4y = CGRectGetHeight(b) - buttonHeight - spacing;
    CGFloat buttonRow2y = buttonRow1y + floor((buttonRow4y - buttonRow1y)
                                              * 0.333);
    CGFloat buttonRow3y = buttonRow1y + floor((buttonRow4y - buttonRow1y)
                                              * 0.667);
    self.actionButton1.frame = CGRectMake(buttonX, buttonRow1y,
                                          buttonWidth, buttonHeight);
    self.actionButton2.frame = CGRectMake(buttonX, buttonRow2y,
                                          buttonWidth, buttonHeight);
    self.actionButton3.frame = CGRectMake(buttonX, buttonRow3y,
                                          buttonWidth, buttonHeight);
    self.actionButton4.frame = CGRectMake(buttonX, buttonRow4y,
                                          buttonWidth, buttonHeight);
}

@end





时间: 2024-10-02 13:25:22

【 Beginning iOS 7 Development《精通iOS7开发》】05 Autorotation and Autosizing的相关文章

【 Beginning iOS 7 Development《精通iOS7开发》】01 Xcode创建项目helloworld [及资料下载]

1.右击Xcode顶部操作栏的任意处,弹出下拉列表,显示三个选项icon and text.text ONLY 和 hide toolbar,作为初学者选择第一项icon and text,这样的好处在于文字加按钮图标更好的指导某个操作是干什么的,其二是因为教科书描述的操作是以文字来的,图文并茂的比较少,比如"scheme"在很多书中都提到,但是直到启动上述选项之前,我还是没有指导这个按钮所在. 2.在编辑action和outlet的时候:单击Main.storyboard文件,在代码

【 Beginning iOS 7 Development《精通iOS7开发》】06 Multiview Applications

一.典型多视图应用 1.TAB BAR. 2.NAVIGATION BAR 3.TAB+NAVIGATION 4.TOOL BAR 二.新建一个多视图APP 1.APP效果演示 2.项目结构 // // BIDSwitchViewController.m // View Switcher // // Created by jason on 14-7-17. // Copyright (c) 2014年 jason. All rights reserved. // #import "BIDSwit

[译] 一名 iOS 开发者的 React Native 开发经历

本文讲的是[译] 一名 iOS 开发者的 React Native 开发经历, 原文地址:An iOS Dev's Experience with React Native 原文作者:本文已获原作者 John Scalo 授权 译文出自:掘金翻译计划 译者:lsvih 校对者:1992chenlu,avocadowang 一名 iOS 开发者的 React Native 开发经历 如果你是一名 iOS 开发者,你应该听说过 React Native.它给出了简单而吸引人的承诺:一次编写,两处部署

iOS视频功能模块的开发

iOS视频功能模块的开发 一.使用MPMoviePlayerController进行视频播放         MPMoviePlayerController是iOS中进行视频播放开发的一个控制类,里面涵盖了视频播放中大部分的需求功能,在使用这个框架时,需要导入头文件<MediaPlayer/MediaPlayer.h>. 1.初始化方法         MPMoviePlayerController可以播放网络视频,也可以播放本地视频,通过不同的URL来进行初始化,例如本地视频的初始化如下:

iOS 6苹果地图应用开发

在iOS 6之后,不再使用谷歌地图了,而是使用苹果自己的地图,但是API编程接口没有太大的变化.开发人员不需要再学习很多新东西就能开发地图应用,这是负责任的做法.因此本节介绍的内容也同样适用于iOS5上运行地图应用开发. iOS应用程序中使用Map Kit API开发地图应用程序. 其核心是MKMapView类使用.我们可以设置地图显示方式.控制地图,可以在地图上添加标注. 显示地图 在Map Kit API中显示地图的视图是MKMapView,它的委托协议是MKMapViewDelegate.

为什么添加认证里无法选择ios app development ?

问题描述 为什么添加认证里无法选择ios app development ? ios app development 和App Store and Ad Hoc 这两个选项都不能选 解决方案 你有没有apple开发者账户?在申请ios开发者证书前需要开发者账户. 解决方案二: 你看一下,已经申请过几个development和App Store and Ad Hoc(distribution)证书了,这两种证书的数量上限,都是两个,如果超过这个数目,就只能删掉原来的,才能申请新的.

iOS 系统自带分享开发

问题描述 iOS 系统自带分享开发 在系统的照片应用中的分享按钮可以弹出整个手机里面app提供的share扩展和action扩展 我想知道如何在自己的app中点击按钮让用户选择其中一个系统提供的分享扩展.这是如何实现的... 解决方案 iOS - 系统自带的分享功能IOS系统自带社交分享ios 调用系统自带分享 解决方案二: http://www.jb51.net/article/74298.htm

《iOS和tvOS 2D游戏开发教程》——第1章,第1.1节开始

第1章 精灵 iOS和tvOS 2D游戏开发教程 Ray Wenderlich撰写 既然你已经知道了什么是Sprite Kit以及为什么要使用它,现在我们来自己尝试一下.我们将要构建的第一款小游戏叫做Zombie Conga,其完成后的样子如图1-1所示. 图1-1 在Zombie Conga中,你负责扮演无忧无虑的.只是想参加舞会的僵尸.好在,僵尸所占据的海边小镇有足够多的小猫.你只需要咬住这些小猫,它们就会加入到僵尸的舞队中来. 不过要小心疯狂的猫女士!这些身穿红色的衣服的老太太,对于想要偷

《iOS和tvOS 2D游戏开发教程》——第2章,第2.1节Sprite Kit游戏循环

第2章 手动移动iOS和tvOS 2D游戏开发教程Ray Wenderlich撰写 如果你完成了第1章的挑战,现在屏幕上已经有一个较大一些的僵尸了,如图2-1所示. 图2-1 注意 如果没有能够完成挑战或者跳过了第1章,也不要担心,直接打开本章的初始工程,从第1章留下的地方继续进行.当然,你想要让精灵移动起来,而不只是站在那里,这个僵尸也渴望动起来. 在Sprite Kit中,要移动一个精灵,有两种方法: 1.在第1章中,你可能已经注意到了(如果看一下Apple所提供的模板代码的话),可以使用一