IOS基础控件思维导图
image-20200729192506800.png四、动画
1、CoreAnimation
image-20200801145819448.png(1)CALayer和UIView
在CoreAnimation中大多数效果都是通过CALayer层来实现的,每一个UIVIew对象都封装了一个CALayer,Layer只负责负责存储视图的状态,不负责进行相应处理,UIView是Layer的delegate。
(2)锚点
锚点是一切Animation的基准点,同一个Animation也会因为不同的anchor point不同而展现出不同的效果,锚点有两个原则:
- 锚点和CALayer.postion重合
- 锚点决定视图进行动画时的参照点
(3)几种常用的CALayer子类
-
CAGradientLayer:色彩渐变图层
-
CAReplicatiorLayer:复制和偏移子图层达到复制的目的
-
CAScrollLayer:多个子层的滑动管理,但是无法进行交互,滚动只能由代码进行管理
-
CAShapeLayer:自定义自己想要的形状
-
CATextLayer:文字图层
-
CATiledLayer:瓦片视图,可以分区域进行绘制
-
CATransformLayer:图层的变化效果,比如3D效果的转变
2、Autolayout(非自带包需自己安装snapkit)
固定组件的尺寸大小往往会导致在不同尺寸的设备上显示出现差异,Autolayout的出现正是为了解决这个问题。
(1)使用方法
//switch为自己的组件,makeConstraints内为闭包参数
Switch?.snp.makeConstraints({(maker) in
})
可以约束的属性如下:
public var top: SnapKit.ConstraintMakerExtendable { get }
public var bottom: SnapKit.ConstraintMakerExtendable { get }
public var right: SnapKit.ConstraintMakerExtendable { get }
public var width: SnapKit.ConstraintMakerExtendable { get }
public var height: SnapKit.ConstraintMakerExtendable { get }
public var size: SnapKit.ConstraintMakerExtendable { get }
public var centerX: SnapKit.ConstraintMakerExtendable { get }
public var centerY: SnapKit.ConstraintMakerExtendable { get }
public var leftMargin: SnapKit.ConstraintMakerExtendable { get }
public var rightMargin: SnapKit.ConstraintMakerExtendable { get }
public var topMargin: SnapKit.ConstraintMakerExtendable { get }
public var bottomMargin: SnapKit.ConstraintMakerExtendable { get }
public var margins: SnapKit.ConstraintMakerExtendable { get }
约束的属性的方法如下:
public func equalTo(_ other: ConstraintRelatableTarget, _ file: String = #file, _ line: UInt = #line) -> ConstraintMakerEditable
public func equalToSuperview(_ file: String = #file, _ line: UInt = #line) -> ConstraintMakerEditable
//ConstraintMakerEditable方法,equalTo()后接
public func multipliedBy(_ amount: ConstraintMultiplierTarget) -> ConstraintMakerEditable
public func dividedBy(_ amount: ConstraintMultiplierTarget) -> ConstraintMakerEditable
public func offset(_ amount: ConstraintOffsetTarget) -> ConstraintMakerEditable
五、存储
1、UserDefault进行简单数据存储
//首先获得UserDefault对象,每个程序系统都会默认创建一个UserDefault对象
let UD = UserDefault.standard
//存一个数据
UD.set(_obj:Any,forKey:String)
//取一个数据,类型由:url,bool,double,float,integer,dictionary,array,data
UD.<type>(forKey:String)
//清空
UD.removeObject(forKey:String)
2、plist文件进行持久化数据存储
pilist文件一般作为程序的配置文件,存储程序的一些默认参数,但是在有必要的时候也可以作为一种持久化存储数据的方式,plist以小巧轻便为主,主要存储的数据类型为基本数据类型
//获取文件path
let path = PlistSetting.getFilePath(File: "myfile.plist")
//获取以这个plist文件创建的一个似Dicitionay对象,这个对象的键值和在plist中的一样
let dic:NSMutableDictionary = NSMutableDictionary.init(contentsOfFile: path)!
//接着可以用这个dic对plist文件读取或者存储
//写入文件,第二个参数指定如果数据无法写入的情况下是否自动忽略
open func write(toFile path: String, atomically useAuxiliaryFile: Bool) -> Bool
3、归档技术
归档数也是持久化数据存储的一种方式,它和plist文件方式存储的最大区别在于它可以存储复杂的数据
(1)简单数据归档
//创建归档载体
let mutable = NSMutableData()
//创建归档对象
let arc = NSKeyedArchiver(forWritingWith:mutable)
//编码
arc.encode(_obj:Any,forKey:String)
//完成
arc.finishEncoding()
//写入文件
mutable.write(toFile:filePath,atomically:bool)
——————————————————————————————————————————————————————————————————————————————
//读取
//尝试获取数据源
let data = try?Data(constentsOf:URL(fileURLWithPath:filePath))
//创建解归档对象
let uner = NSKeyedUnarchiever(forReadingWith:data!)
//进行归档,归档的具体类型在代码提示中有
var d = uner.<..>(forKey:String)
(2)自定义数据类型归档
对于自定义的数据在使用归档时,必须使要用来归档的类遵循NSObject协议和NSCoding协议。并在构造方法中实现解构,在encode方法中实现归档。
class Man:NSObject,NSCoding{
var name:String = ""
var age:Integer = 0
override init(name:String,age:Integer){
super.init()
self.name = name
self.age = age
}
required init?(coder:aDecoder:NSCoder){
super.init()
self.name = aDecoder.decodeObject(forKey:String) as! String
self.age = aDecode.decodeObject(forKey:String )
}
func encode(with aCode:NSCoder){
aCoder.encode(age,forKey:String)
aCoder.encode(name.forKey:String)
}
}
//归档和解归
//归档
let man = Man("Tom",22)
NSKeyedArchiver.archiveRootObject(man,toFile:filePath)
//解档
let de_man = NSKeyedUnarchiever.unarchivObject(with:filePath) as! Man
网友评论