iPad纯代码实现横竖屏切换,采用相对布局

  因为本来不喜欢使用StoryBoard、xib等可视化编程,一直使用的纯代码布局,但是纯代码布局的iOS开发者会遇到一个问题,就是横竖屏适配的问题,如果使用自动布局,那些约束的,写起来都是不难,但是控件之间的关联太多,以至于维护性很差。本人由于工作的原因,做iPad开发,那就必须要解决横竖屏适配的问题,于是就有了这篇文章。

代码如下:

//

//  ViewController.swift

//  iPad横竖屏切换

//

//  Created by zhangxu on 16/7/30.

//  Copyright © 2016年 zhangxu. All rights reserved.

//

import UIKit

class ViewController: UIViewController {

private var leftView : UIView!;

private var topView : UIView!;

private var rightView : UIView!;

private var bottomView : UIView!;

private var viewW : CGFloat = kScreenWidth;

private var viewH : CGFloat = kScreenHeight;

// MARK: - 视图加载完毕调用此方法

override func viewDidLoad() {

super.viewDidLoad()

topView = UIView();

topView.backgroundColor = UIColor.redColor();

self.view.addSubview(topView);

leftView = UIView();

leftView.backgroundColor = UIColor.blueColor();

self.view.addSubview(leftView);

rightView = UIView();

rightView.backgroundColor = UIColor.purpleColor();

self.view.addSubview(rightView);

bottomView = UIView();

bottomView.backgroundColor = UIColor.brownColor();

self.view.addSubview(bottomView);

// Do any additional setup after loading the view, typically from a nib.

}

// MARK: - 支持视图旋转

override func shouldAutorotate() -> Bool {

return true;

}

// MARK: - 交换两个数的值

func changeValue(value1 : CGFloat , value2 : CGFloat) -> (temp1 : CGFloat , temp2 : CGFloat) {

return (value2 , value1);

}

// MARK: - 当前视图将要旋转到的方向

override func willRotateToInterfaceOrientation(toInterfaceOrientation: UIInterfaceOrientation, duration: NSTimeInterval) {

if toInterfaceOrientation.isPortrait {

print("Portrait");

(viewW , viewH) = changeValue(viewW, value2: viewH);

self.view.layoutIfNeeded();

} else if toInterfaceOrientation.isLandscape {

print("Landscape");

(viewW , viewH) = changeValue(viewW, value2: viewH);

self.view.layoutIfNeeded();

}

}

// MARK: - 设置子控件的frame

override func viewDidLayoutSubviews() {

super.viewDidLayoutSubviews();

let topViewX = RealValue(0);

let topViewY = RealValue(0);

let topViewW = viewW;

let topViewH = RealValue(49);

topView.frame = CGRectMake(topViewX, topViewY, topViewW, topViewH);

let leftViewX = topViewX;

let leftViewY = CGRectGetMaxY(topView.frame);

let leftViewW = RealValue(250);

let leftViewH = viewH - topViewH;

leftView.frame = CGRectMake(leftViewX, leftViewY, leftViewW, leftViewH);

let rightViewX = leftViewW;

let rightViewY = topViewH;

let rightViewW = viewW - leftViewW;

let rightViewH = viewH - topViewH * 2;

rightView.frame = CGRectMake(rightViewX, rightViewY, rightViewW, rightViewH);

let bottomViewX = leftViewW;

let bottomViewY = CGRectGetMaxY(rightView.frame);

let bottomViewW = viewW - leftViewW;

let bottomViewH = topViewH;

bottomView.frame = CGRectMake(bottomViewX, bottomViewY, bottomViewW, bottomViewH);

}

// MARK: - 发生内存警告调用此方法

override func didReceiveMemoryWarning() {

super.didReceiveMemoryWarning()

// Dispose of any resources that can be recreated.

}

}

如果觉得看的不过瘾,这里有demo

时间: 2024-12-24 11:37:10

iPad纯代码实现横竖屏切换,采用相对布局的相关文章

Android横竖屏切换及其对应布局加载问题

第一,横竖屏切换连带横竖屏布局问题: 如果要让软件在横竖屏之间切换,由于横竖屏的高宽会发生转换,有可能会要求不同的布局. 可以通过以下两种方法来切换布局: 1)在res目录下建立layout-land和layout-port目录,相应的layout文件名不变,比如:layout-land是横屏的layout,layout-port是竖屏的layout,其他的不用管,横竖屏切换时程序调用Activity的onCreate方法中的setOnContent(xxx),并自动加载相应的布局. 2)假如布

Android横竖屏切换View设置不同尺寸或等比例缩放的XML解决方案

在一些应用中,涉及到横竖屏切换,View要切换成不同大小比例尺寸.为解决这种开发场景,有多种解决方案,比如可以重写View,实现横竖切换在onMesure或者此类View的回调方法里面重新测量重新绘制View的尺寸大小.还有可以在onConfigurationChanged里面根据当前的横竖屏切换情况重写设置View的长宽比例等等.现在给出一种比较简单且较为灵活的处理方法:通过写两套xml布局,实现在不同横竖屏切换状态下的不同大小比例尺寸.这种方案的关键做法是在res里面放置两个layout,分

屏幕方向 横竖屏切换

屏幕方向的控制 屏幕方向是对Activity而言的,你可以在AndroidManifest.xml 文件中,通过activity的android:screenOrientation属性进行设定.在此配置的值会反映在Activity的getRequestedOrientation()方法的返回值中,与之对应的setRequestedOrientation()方法可以动态改变该属性的值. 另外, 还可以通过Configuration对象来取得Activity当前的显示方向 取值: unspecifi

浅析Android的横竖屏切换

上周有个项目需求在横竖屏中控制不一样的布局,我当时采用的方法是写在同一套布局中,监听手机横竖屏的切换事件,来控制布局中各个控件的显示或者隐藏. 这个方法相对来说还行.上几篇帖子中我也说了怎么判断当前手机是横屏模式还是竖屏模式,这里再把工具类贴一下给大家看看: public static boolean isScreenChange(Context mContext) { Configuration mConfiguration = mContext.getResources().getConfi

Activity嵌套多个Fragment实现横竖屏切换

一.上图 二.需求 近期项目遇到个横竖屏切换的问题,较为复杂,在此记之. 1.Activity中竖屏嵌套3个Fragment,本文简称竖屏FP1,FP2,FP3. 2.其中竖屏FP1与FP2可以切换为横屏的FL1,FL2,即竖屏FP1切换到对应的横屏FL1,竖屏FP2对应切换到横屏FL2. 3.FP3不允许横竖屏切换. 4.竖屏FP1,FP2,FP3用ViewPager实现左右滑动切换. 5.横屏的FL1,FL2用布局中的切换按扭实现左右切换,不允许滑动切换. 看到这需求有点儿晕菜了吧!!!呵呵

Android应用:横竖屏切换总结

眨眼间,已经到了2016你年春节前,离上一篇博客的时间已经有6个月多,回想起这半年的种种,不得不说,学习和工作实在是太忙了,或许这就是程序员的真实写照吧. 写博客之初,主要的目的还是为了把自己的学习痕迹记录下来,写的东西比较基础,也不多,算是一种督促,希望能坚持地学习下去,因为学识不存在暴发户,靠的是积累.如果对自己过去半年的学习给个评价,我还是比较满意的,前期定下来的目标都基本都达到了.单凭这个,我就觉得今年的新年会是个好年. 说完过去,那么接着就是将来.因为现在的工作环境上外网不大方便,而且

Activity横竖屏切换的问题

Activity在横竖屏切换的时候会重新走生命周期的方法,这样做的话会导致一些问题 比如我们在界面上录入的一些数据,但因为重新走了生命周期的方法onCreate()方法,这样就会导致前功尽弃,所以就想办法,在横竖屏切换的时候不能让其重新OnCreate(),Android中我们可以在清单文件中对应的Activity使用如下的属性  android:configChanges="keyboardHidden|orientation|screenSize"  这样就可以避免此类事情的发生.

Android横竖屏切换重载问题与小结

(转自:http://www.cnblogs.com/franksunny/p/3714442.html) (老样子,图片啥的详细文档,可以下载后观看 http://files.cnblogs.com/franksunny/635350788930000000.pdf) Android手机或平板都会存在横竖屏切换的功能,通常是由物理重力感应触发的,但是有时候也不尽然,通常在设置里面我们可以对手机的横竖屏切换进行关闭,操作界面如下 只需要点击下“屏幕旋转”按钮就可以关闭横竖屏切换了. 一.禁止AP

android开发之activity横竖屏切换时的生命周期以及横竖屏切换时的资源适配方案

背景:之前有过两篇写activity的博客 android之activity的生命周期详解:详细介绍了activity的整个生命周期.各状态间的转换和返回桌面时保存activity的状态 android之activity中onSaveInstanceState和onRestoreInstanceState的触发时机:介绍了activity中这两个方法的触发时机和作用 本篇博客会牵扯到里面的内容,如果你都有所了解可以直接往下看,如果不了解可以进去回忆下. 问题:在做应用的退出对话框时,发现如果对话