美文网首页
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