iOS基础界面UIViewController和导航介绍

首先区分content controller和container controller的区别。
co
【菜科解读】
iOS基础界面就是通过UIViewController展示的。
首先区分content controller和container controller的区别。
content controlller就是展示我们当前页面的controller,而container controller就是一个管理content controller的容器,基本就是UINavigationController和UITabbarController,本身它也是继承UIViewController,一个UIViewController压栈就是把它加入到container controller的view上。
下面说一下UIViewController的生命周期:
1. -(void)loadView; 这里用来加载controller的view,一般我们都必须调用[super loadView]来完成对view的加载,当然如果不需要用self.view也可以。
然后再对我们需要的子view进行生成和布局。
2.- (void)viewDidLoad; 这里代表view已经加载完成,一般用来处理数据model之类的。
3.- (void)viewWillAppear:(BOOL)animated; Controller将要被加入到当前window的回调,每次push或pop到当前controller就会回调这个函数,代表界面将要展示出来。
4.-(void)viewDidAppear:(BOOL)animated; Controller已经被加入到当前window,也就是push、present或pop的动画已经完成。
{可能被大多数人忽略的是,在每次调用viewWillAppear或viewDidAppear,系统都会调用一下两个函数:
(1)(void)viewWillLayoutSubviews 这个可能很多人忽略了,是5.0才增加的函数,界面将要对子view进行布局。
当通话或录音状态中,状态栏下移,也会回调这个函数。
(2)-(void)viewDidLayoutSubviews 这个跟4对应,也是5.0增加的函数,对子view布局完成。
}
一般在上面4个函数,我们已经可以完成界面的展示。
记得它们的先后顺序是必须的。
至于收到内存警告,在6.0等不同版本controller的不同回调我之前已经介绍过了,就不再介绍了。
关于Container Controller:
这里就只说介绍UINavigationController,本身它就是继承UIViewController,所以它具有上面所说的生命周期。
至于什么东西应该放在viewController,什么应该放在navgationController呢,这里说说我的理解。
因为navgationController就是管理controller的容器,所以它处理的应该就是controller的关系。
并且在某种意义上,它里面的controller就相当于它的一个子view,所以在navgationController的操作就能控制它里面的每个controller。
下面以现在比较流行的手势导航为例:(也就是在二级页面向右滑动就能返回)
@interface TestNavigationController()
{
UIPanGestureRecognizer*_panGesture; //手势导航的recognizer
CGPoint_panStartPoint; //记录开始滑动的point,只有滑动到一定宽度才开启导航
}
@property(nonatomic,retain)UIPanGestureRecognizer*panGesture;
@end
@implementationTestNavigationController
@synthesizepanGesture =_panGesture;
- (void)viewDidLoad
{
[superviewDidLoad];
//在navgationController的view添加手势,也就是为每个当前的controller添加了手势
[self.view removeGestureRecognizer:self.panGesture];
UIPanGestureRecognizer*panGesture = [[UIPanGestureRecognizeralloc]initWithTarget:self
action:@selector(handlePanGesture:)];
panGesture.minimumNumberOfTouches=1;
panGesture.maximumNumberOfTouches=1;
panGesture.delegate=self;
self.panGesture= panGesture;
[panGesturerelease];
[self.view addGestureRecognizer:self.panGesture];
}
-(void)handlePanGesture:(UIPanGestureRecognizer*)pan
{
//记录开始滑动的point
if(pan.state==UIGestureRecognizerStateBegan){
_panStartPoint= [panlocationInView:self.view];
}
//在滑动结束,判断滑动的距离是不是适合宽度,处理是否返回上级页面
if(pan.state==UIGestureRecognizerStateEnded) {
CGPoint_endPoint = [panlocationInView:self.view];
if(_endPoint.x-_panStartPoint.x>70.0f){
//二级页面就能滑动返回
if([self.viewControllerscount] >1){
[selfpopViewControllerAnimated:YES];
}
}
}
}
#pragma mark UIGestureRecognizerDelegate method //手势的delegate,处理一些同时进行的手势操作
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer*)gestureRecognizer
{
//一般情况下,如果上下滑动幅度太大,应该就是在滑动controller的tableview之类的,就不开启滑动导航
if(gestureRecognizer ==self.panGesture) {
CGPointtranslation = [(UIPanGestureRecognizer*)gestureRecognizertranslationInView:self.view];
return((fabs(translation.x) /fabs(translation.y) >5.0f) ?YES:NO);
}
return YES;
}
当我们把appDelegate的window.rootViewController设为TestNavigationController,就可以很方便快捷地实现滑动手势导航功能。
下面说一下静态视图modelViewController,通常我们就是用
- (void)presentViewController:(UIViewController *)viewControllerToPresent animated: (BOOL)flag completion:(void(^)(void))completion压入一个模态视图。
其实静态的概念就是它入栈的方式和动画不同而已。
需要注意的是,一个navgationController不可以push一个navgationController,但是可以present一个navgationController。
另外,无论是一个viewController,还是navgationController,都可以present一个modelViewController,并且modelViewController并不加入到navgationController的导航栈中。
所以navgationController的topViewController和visibleViewController是不同概念的。
topViewController就是导航栈stack的栈顶,也就是不包括modelViewController,而visibleViewController是当前展示的viewController,如果有模态视图就是模态视图,否则就是topViewController。
最后用一句话总结, A viewController is a set of views, A navgationcontroller is a set ofviewControllers.
iOS,基础,界面,UIViewController,和,导基础科学几乎停滞,谁限制了人类的发展?专家的猜测可能是对的
在这个过程中,科学家们做出了很多贡献,例如牛顿、爱因斯坦、麦克斯韦和特斯拉等,他们的成就让人类在不断发展进步的道路上得到了极大的帮助。
可是到了现代,在人类科技发展的过程中,基础科学几乎停滞,这是为什么呢?有专家猜测是因为科学家们的思维被限制了。
在探索世界的过程中,我们需要不断地打破常规思维,挑战现有的知识体系,才能够取得更大的进展。
但是现实是,很多人的思维已经被教育、传统和文化所限制,这也让他们难以接受新思想,难以创造出新的科学成果。
然而,对于那些能够跳出固有思维的科学家来说,他们的成就是不可估量的。
例如牛顿,他发现了万有引力,开启了人类对宇宙的认知之旅;爱因斯坦发表了相对论,打破了牛顿的绝对时空观,对整个科学领域的发展起到了非常重要的作用;麦克斯韦参与了电磁理论的奠基,创立了经典电动力学和麦克斯韦方程组,让人类能够驾驭电磁波;特斯拉发明了交流电系统、无线电通信技术和电动机技术,为工业和家电发展奠定了基础。
这些科学家的贡献,让人类在很多领域都得到了重大的进展。
同时,还有一些科学家在探索微观世界时做出了很多贡献,例如普朗克、玻尔、海森堡、薛定谔、德布罗意、费米、狄拉克等,他们共同创立了量子力学,这是描述微观物体的理论,解释了微观世界的奥秘。
科学需要不断地创新和突破。
历史上的科学家们并不是依靠简单的观察和研究就能够取得成功的,他们需要有勇气和毅力去挑战当时已有的理论和观点,不断进行实验和验证,最终才能够发现新的真相和规律。
这也告诉我们,在现代社会中,我们需要更多的科学家和研究者,不断地探索和发现,为人类的进步和发展做出更大的贡献。
此外,科学的发展不仅需要科学家们的努力,还需要社会各界的支持和重视。
政府需要加大对科研项目的投入和支持,为科学家们提供更好的研究条件和资源;企业和机构也需要在科技领域加大投资和研发力度,为科学家们提供更多的实践机会和平台。
而对于普通人来说,我们也应该关注科学研究的进展和成果,积极参与科普活动,推广科学知识和理念,促进科学文化的普及和发展。
科学是人类前进的不竭动力,科学家们的努力和贡献让我们对世界有了更深刻的认识和理解。
在未来的探索和发展中,我们需要不断地创新和突破,加强科研投入和支持,让科学研究成果更好地造福于人类社会。
iOS16值得更新吗
不过,这次iOS16更新的功能并没有太多,有点小失望。
下面,我们来看看带来的iOS16更新了什么最新内容吧!iOS16更新了什么最新内容1. “个性化锁屏功能”估计是本次最大的更新,支持在锁屏界面放置日程、天气、电量、闹钟等小组件,然而都是安卓玩剩的,三星更是直呼“好家伙”。
2. 信息 App 功能升级,新增编辑、撤回、标记未读三种功能,易用性依然不如安卓。
iOS 16升级后的变化1.锁屏界面很突兀,可以添加小组件确实很方便,但是可选的小组件并不多。
2.设置壁纸功能大改,点进去之后其实是编辑小组件,壁纸需要另外设置,整体和Apple Watch更换表盘逻辑差不多。
3.截图新增重命名功能。
4.桌面滚动器改动,变得更粗了,静止的时候会变成搜索按钮,点击之后的搜索栏,由原来在屏幕顶部展示变成现在中间部分展示,更利于单手操作。
5.锁屏通知都移到了最下方,目前看着不得劲。
6.文本复制粘贴会询问是否执行操作。
总结:目前感知稍明显的就这些,iOS 16的更新基本可以等同于一次小版本更新,更新的主要内容就是锁屏,其它不疼不痒。