IOS superView和subView
在Iphone的视图中,其实就是一个一个view,一层view上面放一层view,一个view上面放一群view,甚至UIWindow也是一个view,在网上找了一张图片很能说明这个问题:
可见我们能够看到的都是一个view视图,而我们能对其进行操作,是因为UIController和UIView都是UIResponder的子类。这时我们对视图进行操作时需要掌握几个比较重要的概念和几个常用的方法.一个是superView和subView的概念,一个是UIView和UIControl类对象的区别。
当我们生成一个独立的view视图时,往往是新建一个UIViewController的文件并伴随一个xib文件,这个xib文件中的fie's owner肯定是这个UIViewController类了,而它的Objects一般就是一个UIView对象(一张干净的画布),我们往往可以将这个UIView改为UIControl,通过修改它的Custom Class项来实现,这时这一大张画布就可以像它上面那些button之流的控件一样来响应方法了,我们在隐藏软键盘时就用到了这一点。
而superView和subView的概念更好理解,view上可以放控件,那么这个view就是这些控件的superView.而UIWindow上可以叠一层又一层的view,UIWindow就是这些view的superView.先放上去的index为0,然后依次累加。
处理superView和subView往往用到几个方法:
removeFromSuperview;//调用者为subView
insertSubview:atIndex;//调用者为superView
了解了这些我们来看一个实例,很简单,实现在根视图控制器上添加两个view(都是整页覆盖屏幕的),然后点击屏幕分别切换显示。
新建一个项目,然后添加两个UIViewController类并附带xib文件,分别取名为FirstViewController,SecondViewController;在viewController中进行如下操作:
viewController.h:
- #import <UIKit/UIKit.h>
- #import "FirstViewController.h"
- #import "SecondViewController.h"
- @interface ViewController : UIViewController
- @property (retain ,nonatomic) FirstViewController *firstViewController;
- @property (retain ,nonatomic) SecondViewController *secondViewController;
- @end
viewController.m:
- #import "ViewController.h"
- @implementation ViewController
- @synthesize firstViewController;
- @synthesize secondViewController;
- - (void)viewDidLoad
- {
- [super viewDidLoad];
- firstViewController = [[FirstViewController alloc]initWithNibName:@"FirstViewController" bundle:nil];
- secondViewController = [[SecondViewController alloc]initWithNibName:@"SecondViewController" bundle:nil];
- [self.view addSubview:firstViewController.view];
- [self.view addSubview:secondViewController.view];
- }
- - (void)viewDidUnload
- {
- [super viewDidUnload];
- // Release any retained subviews of the main view.
- }
- - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
- {
- return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
- }
- @end
以上代码实现了在viewDidLoad中声明两个对象,然后添加到主视图上,这样在打开模拟器时会看到secondView的视图(后添加的在上面,index为1);
然后在FirstViewController.xib文件中将View的Custom Class发为UIControl,背景改一下,贴个label内容为1;
在FirstViewController.h中添加一个输出口:
- #import <UIKit/UIKit.h>
- @interface FirstViewController : UIViewController
- -(IBAction)clickH:(id)sender;
- @end
在FirstViewController.m中进行如下操作:
- #import "FirstViewController.h"
- @interface FirstViewController ()
- @end
- @implementation FirstViewController
- -(IBAction)clickH:(id)sender
- {
- [self.view.superview insertSubview:self.view atIndex:0];
- //将当前的view放到最底部。
- }
- - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
- {
- self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
- if (self) {
- // Custom initialization
- }
- return self;
- }
- - (void)viewDidLoad
- {
- [super viewDidLoad];
- // Do any additional setup after loading the view from its nib.
- }
- - (void)viewDidUnload
- {
- [super viewDidUnload];
- // Release any retained subviews of the main view.
- // e.g. self.myOutlet = nil;
- }
- - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
- {
- return (interfaceOrientation == UIInterfaceOrientationPortrait);
- }
- @end
这样就利用insert方法在点击该视图时将其放入底部,另一个视图就显示出来了,在secondViewController中进行同样的操作,就会实现初始化后点击屏幕来回切换的效果。当然,这是在两个视图的情况下,只是两个不停的换位置的效果,demo用于理解方法,如果是多视图大应用的话常常要进行remove操作,这样会提高效率。
关键字:IOS ,Iphone 开发 ,基础 ,入门 ,superView ,subView ,insertSubview ,removeFromSuperview ,手动多视图切换
IOS superView和subView相关推荐
- iOS事件处理,看我就够了~
该文章属于<简书 - 刘小壮>原创,转载请注明: <简书 - 刘小壮> https://www.jianshu.com/p/b0884faae603 好久没写博客了,前后算起来 ...
- iOS事件处理,看我就够了~ 1
2019独角兽企业重金招聘Python工程师标准>>> 该文章属于<简书 - 刘小壮>原创,转载请注明: <简书 - 刘小壮> https://www.jia ...
- 苹果iOS开发系列--详解Swift 3.0语言的重大变化
概述 从写第一篇Swift文章的时候到现在Swift已经从1.2发展到了今天的3.0,这期间由于Swift目前还在发展阶段并不能向下兼容,因此第一篇文章中的部分代码在当前的Xcode环境中已经无法运行 ...
- 48.iOS动画和理解position与anchorPoint
1.动画的基本概念 动画的使⽤场景:iOS中的动画是指一些视图上的过渡效果,合理利用动画能提⾼用户体验,UIView动画影响的属性 frame:视图框架 center:视图位置 alpha:视图透明度 ...
- iOS的layer的anchorpoint与posion问题
每一个UIView内部都默认关联着一个CALayer, UIView有frame.bounds和center三个属性,CALayer也有类似的属性,分别为frame.bounds.position.a ...
- ios 纯代码怎么适配ipad_iPad横竖屏下的代码适配
你可能非常了解用不同的方式去适配不同尺寸的iPhone屏幕,在适配iPhone屏幕时你需要考虑的只是屏幕大小变化带来的UI元素间隔的变化,但是在iPad上主要针对的是横竖屏下完全不同的UI元素的布局, ...
- AutoLayout 浅析动画
1.AutoLayout相关的几个易混淆的方法 setNeedsLayout layoutIfNeeded layoutSubViews setNeedsUpdateConstraints updat ...
- 深入理解Auto Layout 第一弹
form:https://zhangbuhuai.com/auto-layout-part-1/ By 张不坏 2015-07-16 更新日期:2015-07-17 文章目录 1. 写在前面 2. i ...
- 彻底理解position与anchorPoint - Wonderffee's Blog(转)
引言 相信初接触到CALayer的人都会遇到以下几个问题: 为什么修改anchorPoint会移动layer的位置? CALayer的position点是哪一点呢? anchorPoint与posi ...
- 实现炫酷的卡片式动画!
今天要实现这个动画,来自 Dribbble. 实际效果: Card Animation.gif 源代码:https://github.com/seedante/CardAnimation.git 关键 ...
最新文章
- cmake重新编译matlab,ubuntu系统下cmake 编译matlab中mex文件
- linux 音频文件长度,Linux下压缩音频文件
- TF之DNN:对DNN神经网络进行Tensorboard可视化(得到events.out.tfevents本地服务器输出到网页可视化)
- Spring boot修改Servlet配置
- Breaking the Ledger Security Model
- 【CV】通俗易懂的目标检测 | RCNN, SPPNet, Fast, Faster
- java二维码生成并可以转换
- gcc -fPIC选项
- 【clickhouse】clickhouse 表引擎之 Merge
- 在本地新建分支,以进行功能开发
- Visual Studio 201~ Code 格式检查
- 编译原理 【国防科技大学网课】【笔记】【 陈火旺】 ——用于期末考试 【持续更新ing】
- 元胞自动机模型01——认识元细胞机模型
- 微信开发者工具 http 调试
- 小程序返回页面报错:navigateBack:fail cannot navigate back at first page.
- java for循环
- idea集成泛微axis拉取代码时报错,Axis1.4完整maven jar
- 3DMax软件有什么方法调节摄像机
- java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed
- kubernetes-1.23.6版本部署