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

iOS面试题-UI篇

UIView显示在屏幕上归功于CALayer,通过调用drawRect方法来渲染自身内容,调节CALayer属性可以调整UIView外观, UIView继承自UIResponder,比起CALayer...可以响应用户事件,Xcode6之后可以方便通过视图调试功能查看图层之间关系 UIView是iOS系统界面元素基础,所有的界面元素都继承自它。...CALayer实例,UIView有一个layerClass方法,返回主layer所使用类,UIView子类,可以通过重载这个方法,来让UIView使用不同CALayer来显示,如: - (class...子View树形结构,也可以向它layer上添加子layer,来完成某些特殊显示。...Aview部分区域中显示 假设控制器Bview中有一个UIScrollView这样一个子控件 如果此时在控制器BviewDidLoad设置UIScrollViewcontentSize的话会导致不准确问题

1.9K21

UI篇-VC生命周期以及UIViewlayoutSubviews和drawRect方法

: ** 在使用 VC绘制UI时候,它不同于 UIViewUIView init方法调用后,UIView就已经绘制好(初始化好了)。...但是在VC,当前UIView是在 viewDidLoad 执行后才初始化好,所以我们会见到这样一个Bug,在VC初始化语句后面调用 一个 VC绘制UI方法,你会发现根本没有效果,这就是因为,VC...UIView中方法执行顺序大概是这样: init 方法 >>属性set/get 方法>> layoutSubviews(当然是要达到触发条件)>>drawRect, 使用得当可以在View调用起到很好效果....这样可以在控制器设置一些值给View(如果这些View draw时候需要用到某些变量 值). 2、该方法在调用sizeToFit后被调用,所以可以先调用sizeToFit计算出size。...以上1,2推荐;而3,4不提倡 drawRect方法使用注意点: 1、 **若使用UIView绘图,只能在drawRect:方法获取相应contextRef并绘图。

1.8K30
您找到你想要的搜索结果了吗?
是的
没有找到

iOS开发之登录与访客

自我革命——发现问题 在开发,一直有这样一种情境:App未注册用户可以使用部分功能(访客视图),一旦需要使用一些核心功能或者获取个性化、差异化服务时,就需要用户登录(登录定制)。...} 突然有一天,我们发现某些App访客视图相似度非常大,某些App登录界面也是一样,于是发现上面的代码还是需要精简,于是我们将上面的else部分也上移到父类,也就是在父类判断用户是否登录...,未登录显示访客视图,并且将用户是否登录字段isLogin抽离到一个专门用户模型。...UITabBarController嵌套UINavigationController.png 一开始,进入时候,都显示访客界面,颜色为青色,点击中间+弹出登录界面,点击登录界面的+表示登录过程,然后主界面显示登录后各个界面...否则就显示正常界面 //但是注意 子视图同样需要在viewDidLoad判断用户是否登录 //在登录界面 应该重新赋值windowrootViewController 刷新控制器状态

1K70

iOS14开发-UIView

介绍 UIView 会占用屏幕上一个矩形空间。 主要处理两件事:画出矩形控件,并处理其中事件。 UIView 是层级结构,UIView 只有一个父 View,但可以有多个子 View。...子 View 顺序和子 View 返回数组位置有关(storyboard 左侧树形结构图中先后顺序)。...UIView 可以直接在 storyboard 里面拖拽使用,也可以使用纯代码方式使用。 UILabel、UITextField、UIButton UILabel 显示静态文本。...} } 静态单元格 需要使用 UITableViewController。 直接在 storyboard 布局,不需要使用数据源方法,但如果需要使用到代理方法,仍然需要在控制器实现相应方法。...核心知识 NSCollectionLayoutSize 决定了一个元素大小。表达一个元素 Size 有三种方法: fractional:表示一个元素相对于他父视图比例。

11.7K10

设计模式之创建型模式

创建型模式简介 创建型模式将实例化对象部分从系统独立出来,它们将系统具体使用哪些类信息封装起来,并隐藏了这些类是如何被创建和组合,对外只提供一个通用接口。...一个界面在打开应用时候显示,Label 和 Button 会显示“Hello……”,另一个在应用关闭前显示,Label 和 Button 会显示“Goodbye……”。...,只需要在 Controller ViewDidLoad 方法这样写就好了: let pageView = PageView(factory: HelloUIFactory()) view.addSubview...,因为用 Builder 构造出来产品往往差别很大,并没有一个统一接口,所以只需要在子类声明一个返回特定产品方法即可(当然本例其实最终构造产品都是UIView,是可以提供一个统一接口)。...在某些语言中,使用单例时得注意线程安全。

63240

CALayer 实用属性补充

历史原因造成,因为在Mac这个属性对CGImage和NSImage都起作用),意味着它可以时任何对象类型,但实际上,如果给contents赋值不是CGImageRef,得到都将是空白图片。...当我们使用UIImage时,会获取高质量图片,但CGImage没有拉伸概念,因此使用CGImage设置图片时,拉伸因素会在转换时候丢失,当用代码设置contents图片时,要手动设置图层contentsScale...UIView有一个叫做clipsToBounds属性可以用来决定是否显示超出边界内容,CALaer对应属性是maskToBounds,设置为YES,会剪去超出边界部分(不显示)。  ...contentsRect 这个属性是CGRect类型,它允许我们设置图层显示内容图片一个区域。...与bounds和frame不同,contentsRect不是使用点来计算,它使用了单位坐标,值在0~1之间。默认值是{0,0,1,1},意为整个图片大小。 ?

89030

iOS开发系列——纯代码实现iOS开发

storyboard进行界面设计固然不错,特别是对于初学者经常会使用设计器进行界面设计,但是实际开发过程我们很多情况下会直接使用代码进行界面布局,特别是对于复杂界面布局更是如此。...新建视图控制器默认情况下是无法加载到程序运行界面上,此时需要在应用程序代理程序加载完毕事件手动加载并显示我们视图。...; } } @end 运行效果如下,与之前使用storyboard创建界面类似,同时也能点击登录: a1.png UIView 在这里我们需要对上面的代码一样解释,在弄清上面的代码之前我们不得不熟悉一个...UIView就是指界面可见控件元素,所有的控件最终都继承自UIViewUIView还可以添加其他UIView(通过addSubView方法); 在一个iOS应用必须有一个主窗口UIWindow(...方法中会使用视图控制器view属性所以此时会调用视图控制器loadView方法),视图加载完之后调用viewDidLoad方法,在这个方法我们添加登录相关控件并将这些控件加载到视图控制器KCMainViewController

3.5K60

【IOS 开发】基本 UI 控件详解 (UISegmentedControl | UIImageView | UIProgressView | UISlider | UIAlertView )

UISegmentedControl 控件属性 (1) Style 属性 Style 属性 :  -- Plain : 分段控件使用最普通风格; -- Bordered : 在最普通风格上添加一圈边框...:self action:@selector(click:)]; -- 为 UIView 添加手势识别器 : 调用 UIView addGestureRecognizer 方法; [self.bigPicture...可拉伸图片 (1) 可拉伸图片用法 可拉伸图片作用 : 在上述进度条, 设置 progressImage 和 trackImage 必须是可拉伸图片; (2) 可拉伸图片创建 创建可拉伸图片 : 使用...控件拖动到 OCViewController.h IBOutletConnection 属性变量上 :  (2) 代码示例 代码示例 :  -- 界面设计文件 :  -- OCViewController.h...按钮 UIActionSheet 固定按钮 :  -- 取消按钮 : 灰色背景, 主要用于取消该 UIActionSheet 控件显示; -- 销毁按钮 : 红色背景, 用于删除某记录时, 使用该按钮确认销毁

2.4K40

iOS 之 异步绘制原理

异步绘制产生背景 ---- UIView 中有一个 CALayer 属性,负责 UIView 具体内容显示。...具体过程是系统会把 UIView 显示内容(包括 UILabel 文字,UIImageView 图片等)绘制在一张画布上,完成后倒出图片赋值给 CALayer contents 属性,完成显示...这其中工作都是在主线程完成,这就导致了主线程频繁处理 UI 绘制工作,如果要绘制元素过多,过于频繁,就会造成卡顿。...解决方案使用异步绘制就是: 把 UIView 显示内容(包括 UILabel 文字,UIImageView 图片等)绘制生成 bitmap 在子线程完成。...在 UIView layer.delegate 就是 UIView 本身,UIView 并没有实现 displayLayer: 方法,所以进入系统绘制流程,我们可以通过实现 displayLayer

2.9K30

UIKit Dynamics:开始入门 —《Graphics & Animation系列一》

它允许您通过添加诸如重力,附件(弹簧)和力量等行为来创建感觉真实界面。您定义了您希望界面元素采用物理特征,动态引擎负责其余部分。...将以下代码插入viewDidLoad添加square代码下面: let barrier = UIView(frame: CGRect(x: 0, y: 300, width: 130, height...然后添加一个或多个行为,这些行为会对与其相关联项目施加作用力。 大多数行为可以与多个项目相关联,并且每个项目可以与多个行为相关联。 上图显示了应用的当前行为及其关联。...在屏幕上只能看到一个方块UISnapBehavior效果会更容易。 在viewDidLoad上添加两个属性: var square: UIView!...在viewDidLoad,从square声明删除let关键字,以便它使用新属性而不是局部变量: square = UIView(frame: CGRect(x: 100, y: 100, width

1.8K30

视觉效果 -- iOS Core Animation 系列三

然后在代码写入如下代码: @interface ViewController () @property (weak, nonatomic) IBOutlet UIView *leftView; @property...(weak, nonatomic) IBOutlet UIView *rightView; @end @implementation ViewController - (void)viewDidLoad...之前有个UI需求,同时设置阴影和圆角,圆角简单使用layer.cornerRadius和maskToBounds。...如果想了解的话请点击此处 组透明 alpha UIView有一个alpha属性来决定视图透明度,对应CALayer有一个opacity属性。这两个属性都会影响子层级显示透明度。 下面做个示例。...当显示一个50%透明度图层时,图层每个像素都会一半显示自己颜色,另一半显示图层下面的颜色。这是正常透明度表现。

1.1K30

setNeedsDisplay看我就懂!

一、着手 我定义了一个UIView子类,用于演示使用setNeedsDisplay,这个CircleView子类会在draw(_ rect: CGRect)方法内简单绘制一个圆,它有一个颜色属性,这是我们将要设置用来改变圆颜色...,根据故事板配置步进器默认值,我触发了一组初始圆形颜色。...一般来说,使用框架控件,当您设置属性(如显示标签或值)时,您将会使用该属性,这样会导致重新绘制控件,因为系统会实现对控件drawRect方法调用。...而我们自定义了自己UIView子类,所以我们需要处理影响显示控件更新。在改变颜色情况下,当然需要我们自己控制重新绘制。...所以我们需要调用setNeedsDisplay,明确地告诉系统必须重新绘制,从而显示颜色 由此,我们需要考虑三个重要原则: 1、在iOS,视图很明显会被缓存。

1.2K60

动画分析步骤“三步曲”

如表1所示描述了不同时间段登录按钮坐标变化情况。幸运是大家不需要手动设计这一过程,甚至不需要手动写线性渐变方法,因为iOS在UIView显示层已经帮我们把这个功能集成了。...iOS在UIView图层不仅集成了动画线性渐变方法,而且动画加速、减速以及复杂动画变化时间函数、运动路径函数也已经为大家集成好了,所以只需要学会如何使用这些丰富API即可,且这个功能只需要几行代码就可以实现...UIViewx、y坐标,而CGSize包含了UIViewWidth、Height信息。...2.透明度属性:alpha(透明度属性、范围0-1、浮点型) UIViewalpha透明度属性也可以用作动画效果。当alpha为0时,表明UIView已经隐藏,当alpha为1时UIView显示。...3.Layer属性:圆角渐变、边框颜色、阴影、3D等高级动画效果 UIView是视图显示容器,负责内容显示和事件响应。

85410

UIViewController生命周期及iOS程序执行顺序

视图已经被从屏幕上移除,用户看不到这个视图了 3、dealloc视图被销毁,此处需要对你在init和viewDidLoad创建对象进行释放 关于viewDidUnload:在发生内存警告时候如果本视图不是当前屏幕上正在显示视图的话...,viewDidUnload将会被执行,本视图所有子视图将被销毁,以释放内存, 此时开发者需要手动对viewLoad、viewDidLoad创建对象释放内存。...因为当这个视图再次显示在屏幕上时候,viewLoad、viewDidLoad 再次被调用,以便再次构造视图。...1)- (void)viewDidLoad; 一个APP在载入时会先通过调用loadView方法或者载入IB创建初始界面的方法,将视图载入到内存。...然后会调用viewDidLoad方法来进行进一步设置。 通常,我们对于各种初始数据载入,初始设定等很多内容,都会在这个方法实现,所以这个方法是一个很常用,很重要方法。

1.4K110
领券