例如,很多人习惯在keyWindow上添加一个自定义浮层视图,但是,当自己或者其它第三方框架曾经调高过其它自定义UIWindow属性windowLevel,或者有其它同级windowLevel的UIWindow后来改变过显示状态(如.hidden=NO,makeKeyAndVisible等),而且又没有 设将其设置为keyWindow,结果导致正在显示的UIWindow不是keyWindow,从而导致添加到keyWindow上自定义视图无法显示(被覆盖了)。
1. UIWindow/使用纯代码加载根控制器 UIWindow是一种特殊的UIView,通常在一个app中只会有一个UIWindow -iOS程序启动完毕后,创建的第一个视图控件就是UIWindow,接着创建控制器的view,最后将控制器的view添加到UIWindow上,于是控制器的view就显示在屏幕上了 创建的第一个对象是:UIApplication 一个iOS程序之所以能显示到屏幕上,完全是因为它有UIWindow 。也就说,没有UIWindow,就看不见任何UI界面 1.1 手工创建一个
UIWindow是一种特殊的UIView,通常在一个app中只会有一个UIWindow。
1.UIWindow简介 UIWindow是一种特殊的UIView,通常在一个app中至少会有一个UIWindow。 iOS程序启动完毕后,创建的第一个视图控件就是UIWindow,接着创建控制器的View,最后将控制器的View添加到UIWindow上,于是控制器的View就显示在屏幕上了。 一个iOS程序之所以能显示在屏幕上,完全是因为它有UIWindow,也就是说,没有UIWindow就看不到任何UI界面。 状态栏和键盘都是特殊的UIWindow。 那么UIWindow是如何将View显示到屏幕上的呢
这篇文章主要介绍下有关UIApplication、UIWindow以及程序的启动流程,通过这篇文章,相信你会更加理解iOS 的应用启动过程以及app应用级别的相关知识。
UIViewController采用懒加载的方式,也就是说第一次访问到view属性时才会加载或创建它。由于视图由视图控制器管理,所以讨论视图的加载方式时,主要讨论视图控制器的加载方式。
UIView和CALayer都是源自NSObject。 UIView的继承结构为:UIResponder:NSObject。可以看出UIView的直接父类为UIResponder类。 可见UIResponder是用来响应事件的,也就是说UIView可以响应用户事件。 2.CALayer的继承结构:NSObject 直接从NSObject继承,因为缺少了UIResponder类,所以CALayer不能响应任何的用户事件。 它们分别所属的框架 1.UIView是在/System/Library/Frame
iPhone拥有很好的用户交互体验,这源于iOS系统对交互事件的高效处理和高优响应; App开发者处理用户交互非常便捷,这源于iOS系统和UIKit对用户操作做了封装和默认处理; 本文围绕iOS的事件传递和处理,探究其具体过程。
程序启动的完整过程 int main(int argc, char * argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([MJAppDelegate class])); } } 执行顺序 1.main函数 2.UIApplicationMain 创建UIApplication对象 创建UIApplication的delegate对象
- (UIViewController *)getCurrentVC { UIViewController *result = nil; UIWindow * window = [[UIApplication sharedApplication] keyWindow]; if (window.windowLevel != UIWindowLevelNormal) { NSArray *windows = [[UIApplication sharedApplicatio
用于描述触摸的窗口、位置、运动和力度。一个手指触摸屏幕,就会生成一个 UITouch 对象,如果多个手指同时触摸,就会生成多个 UITouch 对象。
继承自UIView,是一种特殊的 UIView,通常在一个app中只会有一个keyUIWindow。
UIDeviceOrientation,表示设备朝向,可以通过[UIDevice currentDevice] orientation]获取,取值有:
文章目录 前言 I、隐私权限相关的适配 II、KVC相关的适配 III、UIView相关的适配 IV、第三方框架相关 4.1 QMUIKit V、网络相关 see also 前言 I、隐私权限相关的适配 【定位授权新增了精确和模糊定位 可根据不同的需求设置不同的定位精确度】向用户申请临时开启一次精确位置权限的方案(不同场景可定义不同purposeKey) iOS14隐私权限适配:【相册权限】 iOS14相册权限适配 :Limited Photo Access模式、PHAccessLevel(请求查询li
如果出现这个问题,那么首先恭喜你,不是渠道的SDK太旧了,不兼容版本,而是CP游戏工程太老了
在展示 app 启动广告等情况下,我们可能需要在界面上叠加一个 UIWindow,但是实测情况下发现,由于 UIWindow 会被系统引用导致延迟释放,在 customWindow 实例被使用完之后,单纯
iOS13以后,SceneDelegate将负责AppDelegate的某些功能。 window(窗口)的概念被window(场景)的概念所代替, 一个scene现在可以作为您应用程序的用户界面和内容的载体。iOS13以前一个应用程序可以有不止一个window,同样现在一个应用程序也可以有不止一个scene。
昨天我们说了旧的项目在iOS 13下完全启动之后黑屏的问题,然后紧跟问题通过UI图层分析方式一步步的分析基本找到了问题的根源---iPadOS的底层以及操作思路转变啦
iOS中所有继承自UIResponder的类的实例, 都是可以响应touch事件的对象. 响应机制分为传递链和响应链.
storyboard进行界面设计固然不错,特别是对于初学者经常会使用设计器进行界面设计,但是实际开发过程中我们很多情况下会直接使用代码进行界面布局,特别是对于复杂的界面布局更是如此。下面我们就从一个空项目建立一个类似于前面的登录界面。
https://developer.apple.com/library/ios/documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/CreatingViews/CreatingViews.html
这篇文章只讨论触摸事件。对于触摸事件UIResponder内部提供了以下方法来处理事件:
Xcode 11之后新建工程,默认为有SceneDelegate,但是SceneDelegate是从iOS 13之后才有的,如果最低兼容版本到iOS 13以下,需要怎么做呢?
1. AppDelegate应用程序代理 手机上的App有一个致命的缺点:很容易受到打扰。比如一个来电或者锁屏会导致app进入后台甚至被终止。 还有很多其它类似的情况会导致app受到干扰,在app受到干扰时,会产生一些系统事件,这时UIApplication会通知它的delegate对象,让delegate代理来处理这些系统事件。作用:当被打断的时候,通知代理进入到后台。 默认创建出来,有七个方法,解读如下: // 程序第一次加载完毕,就会调用此方法 - (BOOL)application:(UIAppl
前言 在iOS 11发布之后,出现了一系列适配相关的问题,UIScrollView在pagingEnabled=YES时滑动手势不灵敏,UITableView的滑动删除功能变动,UIImagePickerViewController的取消按钮点击区域变小等,本文介绍其中一个UIAlertView问题,分享其发现、定位和解决。 正文 1、问题产生 问题的最初,是iOS 11正式版发布后不久,测试的同学提了一个iOS 11相关的BUG,表现是:在直播间内发送聊天信息,如果被禁言,会弹出“被禁言”提示,键盘收回去
Xcode 11发布之后,新建iOS项目工程时,会有很多变化,最大的变化是多了文件SceneDelegate,此时如果希望通过纯代码设置界面,流程与以往会有一些不一样,本文简单介绍一下。
-(void)willMoveToSuperview:(UIView *)newSuperview -(void)didMoveToSuperview
做iOS开发的同学对UIApplication一定不陌生,当我们想要弹框,蒙层等功能时,都会使用类似如下的操作:
响应者:继承UIResponder的对象称之为响应者对象,能够处理touchesBegan等触摸事件
本文介绍了iOS事件体系中的一些基本概念和原理,包括UITouch、UIEvent、UIResponder、响应链、以及UIView和UIViewController对象在事件响应中的作用。同时,也简单介绍了一些与事件响应相关的属性、方法和用途。
将classes中main.mm 中的代码复制到项目的main.m中 并把后缀也改为mm 并将
A view (an object whose class is UIView or a subclass of UIView) knows how to draw itself into a rectangular area of the interface.
视图(View), 视图控制器(ViewController)是IOS开发UI部分比较重要的东西。在学习视图这一块的东西的时候,感觉和Java Swing中的Panel差不多。在UIKit框架中都有一个UIWindow来容纳我们的View。应用程序中几乎全部的可视控件都是UIView以及UIView的子类的实例,并且UIWindow也是UIView的子类。UIWindow可以不借助于父类视图显示在屏幕上,其余的视图都需要添加到父视图中才能显示。窗口是用来显示视图的,下面我们将会结合着实例来具
可能是因为上面的缺点吧, Mvx 没有提供内置的 Storyboard 支持。 不过 Mvx 的扩展性是很强大的, 通过自定义 MvxTouchViewsContainer 就可以实现对 Storyboard 的支持。
本周主要给大家分享的内容是三种设计模式 (命令模式、中介者模式以及组合模式) 及其它们在AppDelegate解耦场景下的应用,特别是组合模式,沉淀出相应的轮子分享给大家。
2016-11-2120:41:52 发表评论 7℃热度 1.xcode5和xcode7区别? 2.pch文件原理? 3.UIApplication常见功能? 4.程序完整启动流程? 5.U
UIWindow是一种特殊的View 1.iOS启动完毕后,创建的第一个视图控件就是UIWindow。 2.接着创建控制器的View, 3.然后将控制器的view添加到UIWindow上 4.于是控制器的View就显示在屏幕上了。 5.也就是说没有UIWindow,就没有UI界面
hitTest:withEvent是如何找到对应的View? 1.首先调用当前视图的pointInside:withEvent:方法判断触摸点是否在当前视图内; 2.若返回NO,则hitTest:withEvent:返回nil; 3.若返回YES,则向当前视图的所有子视图发送hitTest:withEvent:消息,(所有子视图的遍历顺序是从top到bottom,即从subviews数组 的末尾向前遍历,直到有子视图返回非空对象或者全部子视图遍历完毕); 4.若第一次有子视图返回非空对象,则hitTest:withEvent:方法返回此对象,处理结束; 5.如所有子视图都返回非,则hitTest:withEvent:方法返回自身(self)。
导语: 记录平时用到的XCode LLDB调试小技巧 工欲善其事必先利其器,介绍一些LLDB调试的命令和小技巧~ 基础篇 1.print命令 p 输出基本类型,例如double,int po 输
1.当iOS程序中发生触摸事件后,系统会将事件加入到UIApplication管理的一个任务队列中
Simulator Screen Shot - iPhone 12 - 2021-04-25 at 14.20.23.png
应用场景3: 适配上拉加载更多控件 _vcView.tableView.mj_footer.ignoredScrollViewContentInsetBottom = k_ignoredScrollViewContentInsetBottom;
FPS.gif 示例Github:WSL_FPS FPS :Frames Per Second 的简称缩写,意思是每秒传输帧数,可以理解为我们常说的“刷新率”(单位为Hz);FPS是测量用于保存、显示动态视频的信息数量。每秒钟帧数愈多,所显示的画面就会愈流畅,fps值越低就越卡顿,所以这个值在一定程度上可以衡量应用在图像绘制渲染处理时的性能。 CADisplayLink 是一个用于显示的定时器, 它可以让用户程序的显示与屏幕的硬件刷新保持同步,iOS系统中正常的屏幕刷新率为60Hz(60次每秒)。
在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件,我们称之为“响应者对象”。
在iOS11中,使用UIApplication sharedApplication.windows获取的最顶层的window为_UIInteractiveHighlightEffectWindow,并且其hidden = YES,所以在上面添加内容显示不出来。
1. iOS中的事件基本介绍 在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件。我们称之为“响应者对象” UIApplication、UIViewController、UIView都继承自UIResponder,因此它们都是响应者对象,都能够接收并处理事件 1.1 事件可以分为三大类型,并且UIResponder内部提供了相应方法来处理事件 1. 触摸事件 //一根或者多根手指开始触摸view时自动调用view的下面方法 - (void)touchesBegan
一般情况都是说UIViewController的生命周期,UIView的生命周期经常被忽视。
前言: 在现在iOS布局中,估计有很多很多开发者会使用到 Masonry 或者用到 SDAutoLayout 或者Storyboard或者还有Xib等等,前面两个三方的确是方便了我们的布局,但你写完之后难免可能布局约束支架会有一些冲突或者会有约束警告的出现,比如那个约束要突破那个约束的警告等等。在这里就分享一下写完布局之后自己对布局约束的算是一种检查方法吧。 大家应该听过 UIViewAlertForUnsatisfiableConstraints 这个断点,这个在你写约束出现警告的时候Xc
现在我们已经了解了Core Animation的基础并且使用了优秀的框架JNWSpringAnimation来模仿弹簧系统,是时候来开始写一些真实的示例代码了。
领取专属 10元无门槛券
手把手带您无忧上云