美文网首页
IOS开发(四)Animation和存储

IOS开发(四)Animation和存储

作者: 涛子_024d | 来源:发表于2020-08-08 18:13 被阅读0次

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

相关文章

网友评论

      本文标题:IOS开发(四)Animation和存储

      本文链接:https://www.haomeiwen.com/subject/yilurktx.html