首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用一个UIViewController和两个XIB在iPad上处理方向更改

在iOS应用开发中,处理方向更改通常涉及到横屏和竖屏模式。为了在iPad上使用一个UIViewController和两个XIB来处理方向更改,你需要遵循以下步骤:

  1. 创建一个UIViewController子类,例如:MyViewController
  2. 创建两个XIB文件,例如:MyViewControllerPortrait.xibMyViewControllerLandscape.xib
  3. MyViewController中加载适当的XIB文件,根据设备方向进行判断。
  4. MyViewController中重写viewDidLoad方法,并在其中注册设备方向变化的通知。
  5. MyViewController中实现UIDeviceOrientationDidChangeNotification通知的观察者方法,并在其中更新视图。
  6. MyViewController中重写viewWillTransitionToSize:withTransitionCoordinator:方法,并在其中处理方向变化。

以下是一个简单的示例代码:

代码语言:swift
复制
import UIKit

class MyViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // 注册设备方向变化通知
        NotificationCenter.default.addObserver(self, selector: #selector(deviceOrientationDidChange), name: UIDevice.orientationDidChangeNotification, object: nil)

        // 加载适当的XIB文件
        loadXib()
    }

    override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
        super.viewWillTransition(to: size, with: coordinator)

        // 处理方向变化
        coordinator.animate(alongsideTransition: { _ in
            self.loadXib()
        }, completion: nil)
    }

    @objc func deviceOrientationDidChange() {
        // 更新视图
        loadXib()
    }

    func loadXib() {
        let deviceOrientation = UIDevice.current.orientation
        var xibName = ""

        switch deviceOrientation {
        case .portrait, .portraitUpsideDown:
            xibName = "MyViewControllerPortrait"
        case .landscapeLeft, .landscapeRight:
            xibName = "MyViewControllerLandscape"
        default:
            break
        }

        let nib = UINib(nibName: xibName, bundle: nil)
        let view = nib.instantiate(withOwner: self, options: nil).first as! UIView
        self.view = view
    }
}

通过以上步骤,你可以在iPad上使用一个UIViewController和两个XIB来处理方向更改。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【iOS 开发】iOS 开发 简介 (IOS项目文件 | MVC 模式 | 事件响应机制 | Storyboard 控制界面 | 代码控制界面 | Retina 屏幕图片适配)

UI 控件; (4) xib nib 文件 xib nib 后缀文件 :  -- 新旧区别 : nib 后缀是传统格式, xib 后缀是新格式; -- 默认模板 : Xcode 默认使用 xib...UIViewController 控制器 UIController 方法详解 : 主要用于处理视图加载, 显示等事件; -- viewDidLoad 方法 : 视图装载完成后, 自动回调该方法, 重写时注意先使用...(.xib 文件 或 .storyboard 文件); -- 连接方法 : 界面设计文件对应的 UIViewController 类中, 定义一个 IBOutlet 属性, 该属性 与 Interface...@synthesize : 使用 @property 定义的属性, UIViewController.m 中不需要 使用 @synthesize 设置 setter getter 方法; -- 查看连接关系... iPad Mini (Retina @2x) : 152 x 152 ; 非 Retina 屏幕应用图标规格 :  -- iPad iPad Mini (@1x) : 76 x 76 ; --

4.9K30

iOS14开发-UIViewController

响应设备的方向变化。 有一些特殊的视图控制器(导航控制器、标签栏控制器)可以更加方便规范地管理 UIView。 创建 storyboard 初始化箭头指向的 UIViewController。...,因为这种方式还需要自己处理 2 件事: (1)将 xib 文件 的File’s Owner的类绑定为 UIViewController。...被代理对象(需要传值的 UIViewController) 声明协议,协议中定义传值方法,方法的参数个数与类型取决于需要传值的个数类型。 UIViewController 中声明一个代理属性。...需要传值的 UIViewController 声明一个闭包属性,闭包的参数个数与类型取决于需要传值的个数类型,闭包的返回值一般为 Void。 需要传值的地方调用闭包完成传值。...如果前一个 UIViewController 设置了backButtonItem属性或设置了backButtonTitle,可以起到更改返回按钮文字图片的目的,但是返回按钮的<图标会一直存在,这种方式自带的返回从屏幕边缘滑动返回的效果依然有效

2.3K20

iOS中storyboard故事板使用Segue跳转界面、传值

iOS的开发过程中,不可避免的要设计界面,android中有xml设置界面直接使用java代码设置界面控件两种方式,之前的ios开发中也是类似的有xib文件设置界面及用代码直接设置控件两种方法...对应多个,基本一个应用只需要一个storyboard就可以了,不再需要为每个控制器创建一个xib文件,从这点上来说,还是很方便的,storyboard中查看各个界面的跳转也很方便,但之前一直使用xib...使用Segue实现页面跳转: 要在故事板中使用Segue跳转,非常的简单方便,把鼠标移到第一个视图的按钮,按住鼠标右键不放,拖动鼠标到第二个视图,松开,然后会出现一个选项框,这里是要选择Segue的模式...刚才说到选择modal,Segue有几种模式,iPhone可以用到的有modal、pushcustom,其他还有几种是iPad用的,这里简单说明一下: modal:模态地加载视图控制器,最常用的方式...:YES completion:^{}]; } 现在运行工程,就可以点击两个按钮欢快地跳来跳去了,可以看到从Page2跳回Page1的时候,动画的方向从Page1跳到Page2时是相反的,这才是跳回嘛

1.4K20

设计师应该了解的iOS应用开发基础知识

设计方案允许的情况下,尽可能将那些视觉叠加在一起的元素直接保存在一张背景图片当中,而不要留到开发环节里再进行层叠处理,否则成本将会变的很高。...Xcode左侧的导航栏中选择HomeViewController.xib,然后从右侧的对象库中拖拽一个Label控件到编辑区当中的空白View上面。双击该控件,将文案更改为“Home”。...图片在PortfolioViewController.xib与ContactViewController.xib当中也执行同样的操作,Label的文案相应的更改为“Portfolio”“Contact...然后现有界面基础再添加一个Image View,大致尺寸位置如下图所示:图片切换至辅助编辑器模式,新添加的空白Image View执行Control+拖拽,并指向BigImageViewController.h...我们还为PortfolioViewController创建了一个属性两个方法,其中第二个方法openBigImage并不需要与.xib文件中的任何控件建立关联,所以它的返回类型是“void”,而非“IBAction

81930

编码篇-iOS开发中的奇巧小伎

24、比较两个NSDate相差多少小时 25、播放一张张连续的图片 26、判断两个rect是否有交叉 27、判断一个字符串是否为数字 28、将一个view保存为pdf格式 29、获取当前导航控制器下前一个控制器...45、使用xib设置UIView的边框、圆角 46、将一个xib添加到另外一个xib 47、处理字符串,使其首字母大写 48、获取字符串中的数字 49、自动搜索功能,用户连续输入的时候不搜索,用户停止输入的时候自动搜索...(我这里设置的是0.5s,可根据需求更改) 50、某个界面多个事件同时响应引起的问题(比如,两个button同时按push到新界面,两个都会响应,可能导致push重叠) 51、修改tabBar的frame...image 46、将一个xib添加到另外一个xib // 假设你的自定义view名字为CustomView,你需要在CustomView.m中重写 `- (instancetype)initWithCoder...将一个xib添加到另外一个xib 47、处理字符串,使其首字母大写 NSString *str = @"abcdefghijklmn"; NSString *resultStr; if (str &&

5.3K10

《iOS UI 开发捷径 利用 Interface Builder 高效、优雅地开发 UI》 读书笔记第1章 Interface Bundle 概要第2章 使用 Interface Builder第3

关联 xib 文件与源文件 关联 xib 文件与 UIView 子类的源文件 新建一个空的xib文件,拖一个UIView上去 新建一个继承自UIView的源文件 选中xib文件里的View,把class...mvc 理解 File's Owner 关联 xib 文件与 UIViewController 子类的源文件 自定义一个 VC 的 View 的两种方法 IB 文件中选中 VC 所在的 View,...既可以与 UIView 关联,也可以与 UIViewController 关联,也可以同时关联 UIView 与 UIViewController 使用 xib 通过 Bundle 方式加载 通过...UIView view.addSubview(testView) } 使用UIViewController 子类源文件关联的 xib Demo HomeViewController.swift...第4章 Interface Builder 中使用 Auto Layout ---- IB 中使用 Auto Layout 的优缺点 设置约束十分简单 如果约束不恰当,IB 提供很好的实时反馈

2.4K80

IOS基础知识第二季

1.分辨率:320*480,640*960 2.icon图标需要两个(57*57) 114*114 用于视网膜屏幕 icon@2x.png,icon.png 3.狂写代码,先写再调试、搜索、自学...分别存放再文件系统的独立位置 模拟器中的沙盒位置:~/Library/资源库/Application Support/Iphone Simulator/ 9.应用程序周期;main—UIapplicationmain处理...创建自动释放池,调用UIApplicationMain,释放自动释放池 10.作业: icon、default、app名字、100秒倒计时、后台挂起 11.UIKIT框架结构 UIView是视图的基类 UIViewController...之前320*480 IPHone4,4s是640*960 iphone5设备屏幕:640*1136 ipad/ipad2:1024*768 ipad3/ipad4:2048*1536 ipad...]; 16.Ui创建两种方式 xib创建 NSBundle *bundle = [NSBundle mainBundle]; NSArray *arr = [bundle loadNibNamed

95560

程序启动的完整过程

函数 2.UIApplicationMain 创建UIApplication对象 创建UIApplication的delegate对象 3.开启主运行循环 3(1).delegate对象开始处理...app中至少有一个UIWindow iOS启动完毕后创建的第一个视图就是UIWindow 接着创建控制器,再把控制器的View加到UIWindow显示出来 - didFinishLaunchingWithOptions...:[UIScreen mainScreen].bounds]; // 2.设置窗口的根控制器 // 通过xib去加载控制器 // .首先创建一个Xib文件 //....Xib文件需要拖一个View描述控制器的View // .需要把Xib的View与控制器连线,设置Xib的File'owner为控制器 UIViewController...view即将销毁的时候) 销毁view,首先不在视野中得view viewDidUnload(view销毁完毕) 处理应用程序的一些生命周期方法 // 程序启动完成的时候调用 // __func__

1.5K150

UIViewController生命周期

通过Nib文件加载: Nib文件其实就是xib文件,Storyboard相当于是聚合了多个nib文件,并且添加了对不同的UIViewController之间的seguerelationship...通过加载xib文件来创建UIViewController的view 如果没有找到相关联的xib文件,就会创建一个空白的UIView,然后赋值给UIViewController的view属性 默认不用实现...合创建一些附加的view控件 3、ViewWillAppear 视图加载完成,并即将显示屏幕时,会调用viewWillAppear方法,在这个方法里,可以改变当前屏幕方向或状态栏的风格等。...没有事件处理情况下程序通常停留在这个状态。 Active激活:程序在前台运行而且接收到了事件。这也是前台的一个正常的模式。...App中,UIWindow是最顶层的界面内容,我们使用UIWindowUIView来呈现界面。

1.8K10

App的生命周期

UIViewController 的生命周期 // 非storyBoard(xib或非xib)都走这个方法 - (instancetype)initWithNibName:(NSString *)nibNameOrNil...initWithCoder: 如果使用StoryBoard进行视图管理,程序不会直接初始化一个UIViewController,StoryBoard会自动初始化或在segue被触发时自动初始化,因此方法...loadView方法UIViewController对象的view被访问且为空的时候调用。这是它与awakeFromNib方法的一个区别。...假设我们处理内存警告时释放view属性:self.view = nil。因此loadView方法视图控制器的生命周期内可能被调用多次。...viewWillAppear 系统载入所有的数据后,将会在屏幕显示视图,这时会先调用这个方法,通常我们会在这个方法对即将显示的视图做进一步的设置。

1.2K10

iOS-屏幕适配基本概念

ImageName: 图片名字,根据场景命名 device_modifier: 可选,可以是 ~ipad 或者 ~iphone, 当需要为 iPad iPhone...一个基本思路是: 选择一种尺寸作为设计开发基准 定义一套适配规则,自动适配剩下两种尺寸 特殊适配效果给出设计效果 这个问题很早之前知乎已经被讨论,附上链接:手机淘宝设计师pigtwo的回答...这样屏幕越大,垂直方向上可以显示更多内容,发挥大屏幕的优势 关于xib、storyboard、代码 xibStoryBoard xib:每个viewcontroller对应单独的xib,可以更加方便单独管理...,项目也方便多人一起开发,改动视图方便,不用全局改动 StoryBoard:StoryBoard是一个包含了多个xib的文件,管理方便,StoryBoard中不仅可以看到每个 ViewController...跳转只能在代码实现,比较混乱 StoryBoard适合单独开发并且是中小型项目的时候使用 xib代码区别 xib优缺点 xib可视化,开发速度快,代码量少 合作开发,彼此阅读困难,无法git查看历史改动

35810

如何把设计图自动转换为iOS代码? 在线等,挺急的!

.每次都把大把时间浪费"画UI",真的感觉好无趣,好浪费生命;临时遇到产品经理改动需求,可能一个对方看似更加"合理"的改动,我这边几乎要大动干戈!...我想我对编程本身确实是感兴趣的,但是整天浪费时间 UI,真的感觉有点虚度光阴.所以说,本不充裕的空闲里,我一直思考的一个命题就是: 如何实现 UI 的自动化与独立化....尽管作为一名iOS开发人员,我依然对苹果公司提供的开发技术及其发展方向持谨慎保守态度.前一段时间,尝试使用 Xib来布局视图,遇到一些坑,但是熟悉之后,也确实比原来单纯基于绝对位置的纯代码布局更灵活些...,也更快捷些.在此期间,我研究的一个重要话题就是如何实现Xib之间的嵌套复用,即在一个Xib如何直接嵌入另一个Xib.乍听起来很简单,但是亲身实践之后,才发现其难度.我不是来吐槽的,个中曲折不再一一赘述...* 使用方法: xib或storyboard中,将某一用于占位的view的 custom class 设为对一个的 component, 则初始化时,会自动使用此component对应的xib文件中的内容去替换对应位置

1.3K60

iOS---iPad开发及iPad特有的特技

1.控制器中得到设备的旋转方向 iOS8及以后,屏幕就只有旋转后屏幕尺寸之分,不再是过期的旋转方向。...iOS7及以前得到屏幕旋转方向的方法 /** // UIInterfaceOrientation ,屏幕方向 UIInterfaceOrientationUnknown = UIDeviceOrientationUnknown...特有的UIPopoverController的使用 案例: 情景① 导航栏添加leftBarButtonItem按钮,然后弹出UIPopoverController 创建UIPopoverController...控制器的内容控制器添加到UIPopoverController 1>设置内容控制器(并需先创建内容控制器) 强调UIPopoverController不是继承UIViewController,也就不具备显示功能...View添加个按钮,点击,弹出一个UIPopoverController控制器,然后这个控制器再用导航控制器包装,显示二级控制器 1>调用方法 /** * 弹出UIPopoverController

2.5K70

IOS入门之StoryBoard

我们来看看三种方式的主要区别: 手写页面逻辑代码 如果你的目的是写一些可以高度重用的控件提供给其他开发者使用,那毫无疑问最好的选择应该是使用代码来完成UIView的子类.这样进一步的修改其他开发者使用时...MVC:一般来说,单个的xib文件对应一个ViewController,而对于一些自定义的view,往往也会使用单个xib并从main bundle进行加载的方式来载入.IB帮助完成view的创建,布局与...但是xib最大的问题在于xib中的设置往往并非最终设置,代码中你将有机会覆盖你xib文件中进行的UI设计.不同的地方对同一个属性进行设置,这在之后的维护中将会是噩梦般的存在.因为其实IB还是有所局限的...尤其 Git 代码版本的控制下,处理分支合并产生的冲突会变得非常麻烦。...所以,把 Storyboard 分离有一个 1 - 5 原则:把每一个 Storyboard 尽量分离成一个处理范围,每一个 Storyboard 尽量控制少于 5 个 View。

1.7K70

如何优雅的动态修改app 图标

完成后的操作将会在任意的后台队列中异步执行; 如果需要更改UI,请确保主队列中执行. - (void)setAlternateIconName:(nullable NSString *)alternateIconName...files(iOS 5)内添加一个Key: CFBundleAlternateIcons ,类型为字典,在这个字典里配置我们所有需要动态修改的icon:键为icon的名称,值为一个字典(这个字典里包含两个键...动态图标 iPad的动态图标设置上面步骤基本一样,有的文章说是将 CFBundleIcons 改为 CFBundleIcons~ipad,即: 但是,测试中发现,使用上面的key值也是可以实现动态改变的...,即不做任何修改,iPhoneiPad使用相同的配置,即:CFBundleIcons。...从上面的示意图可以发现,设置icon的时候,会有个系统弹框,这样有时候会不太友好,我们可以使用Runtime,对UIViewController进行扩展来隐藏这个弹框: // UIViewController

1.3K20

iOS 关于Interface Building 的一些小技巧

AutoLayout布局是不是遇到过一个均分排列的布局,还要隐藏显示其中一个。 这样布局就很麻烦了,每次都要更改约束。...全部代码布局如下图: ? 2. AutoLayout 优先级动画 没有UISatckView之前,我们可以利用优先级完成三个Tab删除一个的场景,但是再重新显示是比较困难的。...约束:三个Button等宽等高,均匀分布到屏幕,关键点是Tab3的约束 优先级的作用简单总结一下:一个元素可以同时存在两个相同作用的约束,优先级必须有先后,当其中一个失效,另一个就会使用,这样当我们删除相关元素...Xib中怎么复用Xib文件 上个例子中制作了一个Xib view,但是项目中往往想更直接在StoryBoard中复用Xib view。...展望 希望写一个第三方库,可以更方便的使用Interface Building去写app,扩展更多更有用的可视化属性控件。

1.7K31

iOS 面试策略之系统框架-UIKit

它是苹果官方提供的管理界面交互的最基本的 API。UIKit 被用在所有的 iPhone iPad 开发中,它涵盖的内容包括触摸交互处理、视图布局、图形绘制中。...本节将从用户界面聊起,回答开发中常见的布局交互问题;之后将重点集中动画渲染上,最后的问答题将集中 iPad 的多屏开发上。...storyboard/xib 中搜索起来很不方便,且统一修改多个 UI 控件的属性值不可能,必须一个一个改。代码中一个工厂模式就可以搞定。 性能影响。...除此之外他还有关键帧动画两个 view 转化等接口。它实现的动画无法回撤、暂停、与手势交互。 CALayer Animation 是更在底层 CALayer 的动画接口。...下图详尽说明了 iPad 多任务的尺寸分类: [image] 11.代码实现:将 UIImageView 的图片直接拖拽到另一个 UIImageView

1.4K20

【swift学习笔记】三.使用xib自定义UITableViewCell

使用xib自定义tableviewCell看一下效果图 1.自定义列 新建一个xib文件 carTblCell,拖放一个UITableViewCell,再拖放一个图片一个文本框到tableviewcell... 并给我们的xib一个标识 为了学习,我这里的xib后台的class是分开建的。...我们再建一个cocoa touch class文件名称为CarCellTableViewCell继承自UITableViewCell 并把我们的xib新建的CarCellTableViewCell建立联接...CarCellTableViewCell里建立xib的图片和文本框的输出 import UIKit class CarCellTableViewCell: UITableViewCell {...main.storyboard拖放一个uitableview,并在后台代码建立输出联接 1.load事件里注册xib 2.tableveiw的方法里得到当前的列,指定数据源。

1.8K70
领券