【UIKit】UIView基础学习

UIView基础介绍

官网文档:

UIView简介

UIView 算得上是iOS中就基础重要的显示控件,大部分控件都是基于其而来,它具有展示、响应、动画等基础特点,也是自定义的基础控件的最佳选择。  

UIView无法响应点击事件情况:

  • 透明度小于0.001
  • 视图被影藏
  • 用户交互被设置为false

Frame/bounds/center的理解

     绝对坐标系:屏幕的左上角是坐标原点(0,0);横向为X轴,纵向为Y轴;向左边移动X值减小,向右边移动X值增加;向下边移动Y值增加,向上边移动Y值减小;

      每个视图的起始位置和大小由Frame来确定,frame是一个CGRect类型的属性,CGRect是一个结构体,里面有两个变量origin和size,其中origin是一个CGPoint点,指的是视图左上角的那个点的位置,决定了视图的位置;size是CGSize类型的,决定了视图的大小;

     Frame视图在其父视图坐标系中的位置和大小,建议大家在控件初始化之后,紧接着就去设置Frame,设置完成后,假如涉及到修改控件的位置、大小等,就需要再去修改Frame;

     Bounds视图在其自己的坐标系中的位置和大小。Bounds属性中,视图的bounds.origin始终是(0,0),因此bounds属性最核心的作用是设置视图的大小,即bounds.size,当需要去修改视图大小的时候,可以修改bounds.size;

    Center视图中心点在父视图坐标系中的坐标,当需要修改视图对象的位置时,可以修改Center属性。

坐标系转换:[传送门]

视图的变形【transform】

相关知识点参考开发文档CGAffineTransformReference

在开发过程中,经常需要对视图对象的样式进行修改,常见的修改操作有位移、放大/缩小、旋转等。当涉及到视图位移的时候,可以修改视图的center以及frame属性;当涉及到视图的缩放以及旋转操作时,推荐修改视图的transform属性

1、位移

当需要修改视图对象的位置时(上移、下移、左移、右移),可以通过修改视图对象的center和frame属性。提示,point由x和y构成。该方法沿固定x轴或者y轴移动

第二中位移方法是沿初始移动边方向移动,比如发生旋转后移动方向将变换。

使用方法:public func CGAffineTransformTranslate(t:CGAffineTransform, _ tx: CGFloat, _ ty: CGFloat) -> CGAffineTransform

2. 放大和缩小【scate:比例、放大】

第一种方法可以修改视图对象的bounds.size属性,第二种方法是直接修改视图对象的transform【变形】属性

利用方法:public func CGAffineTransformScale(t:CGAffineTransform(放大对象【myView.transform】), _ sx: CGFloat(放大或缩小比例), _ sy: CGFloat) -> CGAffineTransform

3、旋转【rotate:旋转】

通过修改视图对象的transform属性,可以实现视图的顺时针旋转以及逆时针旋转,此时需要使用到如下函数,其中,angle属性是旋转的角度。

利用方法:public func CGAffineTransformRotate(t:CGAffineTransform, _ angle: CGFloat) -> CGAffineTransform

4、重置transform属性

当需要重置transform属性时,可以进行如下设置。但要注意的是:假如需要完全重置一个视图的样式,除了重置transform属性之外,还需要重置frame, center, bounds。

myView.transform=CGAffineTransformIdentity

视图的层次与构成

    图层的处理有代码和IB两种方法,最好不要混搭使用,这里我选择用IB处理图层,有一个总原则,后产生的视图层在最外层 。

常用属性和方法:

    public var superview: UIView? { get }//父视图
    public var subviews: [UIView] { get }//所有子视图
    public var window: UIWindow? { get }//视图所在Window
    
    public func removeFromSuperview()
    public func insertSubview(view: UIView, atIndex index: Int)
    public func exchangeSubviewAtIndex(index1: Int, withSubviewAtIndex index2: Int)
    
    public func addSubview(view: UIView)
    public func insertSubview(view: UIView, belowSubview siblingSubview: UIView)
    public func insertSubview(view: UIView, aboveSubview siblingSubview: UIView)
    
    public func bringSubviewToFront(view: UIView)
    public func sendSubviewToBack(view: UIView)
    
    public func didAddSubview(subview: UIView)
    public func willRemoveSubview(subview: UIView)
    
    public func willMoveToSuperview(newSuperview: UIView?)
    public func didMoveToSuperview()
    public func willMoveToWindow(newWindow: UIWindow?)
    public func didMoveToWindow()
    
    public func isDescendantOfView(view: UIView) -> Bool // returns YES for self.
    public func viewWithTag(tag: Int) -> UIView? // recursive search. includes self
    
    // Allows you to perform layout before the drawing cycle happens. -layoutIfNeeded forces layout early
    public func setNeedsLayout()
    public func layoutIfNeeded()
    
    public func layoutSubviews() //

视图的动画

1.哪些属性可以采用动画?只要是可以修改变化的属性大都可以用动画,动画效果对系统资源消耗不是很高。

2.实现动画播放的方法类CAAnimation Class Reference

视图响应用户交换事件

  相关文档:UIGestureRecognizer Calss Reference

 1、相关属性

UIView类中,userInteractionEnabled属性可以用来定义视图类对象是否能够响应用户点击。对于某些UIView的子类,例如UILabel,UIImageView,该属性默认情况下是关闭的,因此如果需要响应手势等交互事件,需要修改该属性的值为YES。

另外,multipleTouchEnabled属性用于设置视图对象能否支持多点触控,默认情况下,其取值是NO。这些都是可以再IB中设置的

2、添加手势【gesture:手势  recognize:识别】

对于视图类对象,都可以通过添加手势的方法,来响应用户的交互。一个视图类对象,可以添加多个手势。例如,在一些游戏App中,一个按钮的点击以及长按可以对应不同的操作。UIView类中,与手势相关的属性和方法如下:

public var gestureRecognizers: [UIGestureRecognizer]?//交互手势个数

public funcaddGestureRecognizer(gestureRecognizer: UIGestureRecognizer)//添加交互手势

 public funcremoveGestureRecognizer(gestureRecognizer: UIGestureRecognizer)//移除手势

添加手势响应的步骤

     1.创建一个交互手势对象,一般使用UIGestureRecognizer的子类,自行查看

     创建对象时注意,要实现Selecto方法(及产生交互之后的处理)【可能会遇到的问题:selector访问权问题】,targe一般为自身

     2、再将对象添加手势

    3、自定义视图类实现touches系列方法

由于UIView继承自UIResponder,因此UIView也同时具有UIResponder的属性和方法。在UIResponder类的定义中,提供了一些响应用户点击操作的方法,如下所示。在自定义视图类中,如果需要响应用户的点击操作,也可以通过重写这些方法来实现用户交互。

需要特别注意的一点是:视图类能够响应用户交互的范围,一定不能超出视图frame所划定的区域,大家可以做一个测试:在父视图中再添加一个更大的子视图,点击超出父视图的范围,看看是否可以调用touchesBegan:方法。

内容模式(contentMode)

凡事带有Scanle的图片都会拉伸

凡事带有Aspect的,图片都会保持原来的宽高比,图片不会变形

  scaleAspectFit:图片拉伸完全显示在View中(可能变形)

 显示图片时,最好视图大小与图片大小一致,达到不失真,进行比例拉伸。

图片拉伸

Xcode中提供了Slicing功能专门用来裁剪图片。通过Slicing功能,可以设置固定不需要拉伸的区域,以及需要拉伸的区域。这个功能是针对图片的设置,不需要针对UIView去做任何的操作。选择Assets.xcassets,选中某个图片,并点击右下角的Show Slicing,

自定义视图

Define The Custom View

控件改变坐标系(convertRecr)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
UIKit是苹果公司为iOS和macOS平台提供的核心框架之一,主要用于构建用户界面和应用程序交互。以下是UIKit基础知识概述: 1. **视图层次结构**: UIKit的设计基于树状的视图层次结构,从根视图开始,包含窗口(Window)、视图容器(View Controller)以及各种UI元素(如UILabel, UIButton, UIImageView等)。 2. **视图控件**: UIView是所有UI元素的基本组件,它可以设置位置、大小、背景颜色和约束。UIViewController负责管理视图,并可以响应用户事件。 3. **Auto Layout**: 自动布局系统帮助开发者轻松地处理不同屏幕尺寸下的布局调整,通过设置view之间的约束来保持布局的一致性。 4. **手势识别**: UIGestureRecognizer允许处理各种触屏手势,例如Tap、Pan、Swipe等,为增强用户体验提供便利。 5. **文本和图像显示**: UILabel用于显示文本,UIImageView则用于显示图片。还可以使用NSAttributedString和Core Graphics进行更复杂的文本和图形渲染。 6. **事件处理**: 通过代理方法或通知机制,开发者可以监听和响应用户的操作,如按钮点击、键盘事件等。 7. **动画和过渡**: 使用UIView.animate或CADisplayLink进行界面动画,以及UIStoryboardSegue进行界面跳转时的平滑过渡效果。 8. **用户界面自定义**: 可以通过KVC、KVO、NSCoding等方式定制视图属性,或通过自绘视图Custom Drawing来实现独特的UI效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值