美文网首页
Note 24 ScrollView,观察者,两种文件管理结合

Note 24 ScrollView,观察者,两种文件管理结合

作者: cry_0416 | 来源:发表于2016-08-25 20:50 被阅读37次

    JSONFile

    1. 将对象属性保存到字典里

    2. 然后将字典JSON化

    3. 用NSData的writeTo 方法保存到文件中

            let data = try! NSJSONSerialization.dataWithJSONObject(dict, options: [])
            let s = NSString(data: data, encoding: NSUTF8StringEncoding)//JSON化(NSData类型)
            print(s!)
            
            let path1 = NSHomeDirectory() + "/Documents/1.json"
            try! data.writeToFile(path1, options: .AtomicWrite)
    
    

    fileManger

    • 单例类 :只有一个对象
    1. let app = UIApplication.sharedApplication()
    2. let ud = NSUserDefaults.standardUserDefaults()
    3. let fileManager = NSFileManager.defautlManager()
    4. ...等等

    获取fileManger对象
    let fileManager = NSFileManager.defaultManager

    fileExistAtPath 判断文件是否存在

    removeItemAtPath 删除文件

    creatFileAtPath 创建文件,可以写入NSData

    creatDirectoryAtPath 创建文件夹

            //程序局部性
            let fileManager = NSFileManager.defaultManager()
            //管理文件、文件夹
            //创建、删除、移动、复制
            //整个文件的管理
            
            let path = NSHomeDirectory() + "/Documents/1.plist"
            print(path)
            if fileManager.fileExistsAtPath(path) {
                print("文件存在")
    //            try! fileManager.removeItemAtPath(path)
            }
            else {
                let s = "A zoo in Changsha!"
                fileManager.createFileAtPath(path, contents: s.dataUsingEncoding(NSUTF8StringEncoding), attributes: nil)
            }
            
            let dir = NSHomeDirectory() + "/Documents/2/3/4"
            try! fileManager.createDirectoryAtPath(dir, withIntermediateDirectories: true, attributes: nil)
            
            
            let attrs = try! fileManager.attributesOfItemAtPath(path)//文件属性
            print(attrs[NSFileSize])
    

    fileHandle

    创建fileHandle对象 -> 有三种创建对象的构造函数

    1. 只读
    2. 只写
    3. update(both)

    不同的文件标识类型只能执行相关的操作

    offset
    每个对象操作完一次,都有指针记录当前操作的位置,下次继续使用相同对象操作就能继续

    seekTofileOffset
    跳到指定位置

    一个新的fireHandle对象读写都是从0开始

    操作完一定要CloseFile

        //NSFileHandle
            //1. 没有创建文件的能力,只能用于操作文件内容
            //Read: 只读
            //Update: 修改
            //Write: 只写
            let fileHandle = NSFileHandle(forReadingAtPath: path)
            //偏移量:记录当前已经操作到文件的某个位置
            //每一次操作都会导致偏移量自动发生变化
            let data1 = fileHandle?.readDataOfLength(1) //NSData
            print(data1?.length)
            print(NSString(data: data1!, encoding: NSUTF8StringEncoding))
            
            let data2 = fileHandle?.readDataOfLength(2)
            print(NSString(data: data2!, encoding: NSUTF8StringEncoding))
            
            fileHandle?.seekToFileOffset(0)
            let data3 = fileHandle?.readDataOfLength(1)
            print(NSString(data: data3!, encoding: NSUTF8StringEncoding))
    
            let s = "B C"
            let fileHandle2 = NSFileHandle(forWritingAtPath: path)
            fileHandle2?.writeData(s.dataUsingEncoding(NSUTF8StringEncoding)!)
            
            
            fileHandle?.closeFile()
            fileHandle2?.closeFile()//操作完一定要CloseFile
    

    SrollView

    两个特点

    • 滚动
    • 缩放

    UIScrollView能否滚动

    1. scrollEnabled
    2. contentSize:(0,0) 内容大小,只有超过本身尺寸才能滚动

    UIScrollView缩放

    通过实现协议代理UIScrollViewDelegate里的scrollViewDidZoom方法返回一个UIView(类)的子视图,该视图可以缩放

        func scrollViewDidZoom(scrollView: UIScrollView) {
            <#code#>
        }
    

    UIScrollView 一些属性设置

    • pagingEnabled 分页设置
    • scrollView.contextInset = UIEdgeInsets()设置边缘间隙
    • scrollView.contextOffset = CGPoint() 设置偏移/正方向:左,上(拖动的方向)
    • scrollView.directionalLockEnabled/Bool 一次只允许一个方向滚动
    • scrollView.bounces/Bool 弹性效果
    • scrollView.showHorizontalScrolIndicator/Vertical 显示滑动指示器
    • 可以通过setContentOffsetscrollRectToVisible,偏移到一个点,或者使一个矩形区域显示,来实现视图偏移

    UIScrollViewDelegate中的一些方法:

    ScrollView停止的时机

        //两种停止方式
        //一种是拖动松手,减速停止
        //一种是拖动,然后停止,再松开手,不用减速
        //结束拖动
        func scrollViewDidEndDragging(scrollView: UIScrollView, willDecelerate decelerate: Bool) {
            if decelerate {
                print("EndDragging,要减速")
            }
            else {
                print("EndDragging,不用减速")
            }
        }
         //结束减速
        func scrollViewDidEndDecelerating(scrollView: UIScrollView) {
            print("减速完成")
        }
    

    collectionView是继承ScrollView,也有ScrollView的属性

    KVC

    通过SetValue - key/keyPath

    class Food: NSObject {
        var name: String!
    }
    
    class Animal: NSObject {
        var name: String!
        var age: Int!
        var weight: Double!
        
        var food: Food!
    }
    
            ani.name = "Zhangsan"
            
            print(ani.name)
            
            //KVC - Key value coding
            //keyPath
            //无视所有访问权限控制 -- OC里面
            //swift里面如果设置了private就不能访问
            ani.setValue("Lisi", forKey: "name")
            print(ani.name)
            
            print(ani.valueForKey("name"))
            
            let food = Food()
            food.name = "骨头"
            
            ani.food = food
            
            print(ani.food.name)
            
            ani.setValue("耗子", forKeyPath: "food.name")
            print(ani.food.name)
            
            print(ani.valueForKeyPath("food.name"))
            
    

    KVO key - value observing

    swift 里面只能观察到 通过KVC改变的值

            //KVO - key-value observing
            //self观察ani的name属性的变化
            ani.addObserver(self, forKeyPath: "name", options: [.New], context: nil)
            
            //会通知观察者
            ani.setValue("Dog", forKeyPath: "name")
    //        ani.name = "Cat"
            ani.setValue("Cat", forKey: "name")
            
            ani.removeObserver(self, forKeyPath: "name")
    

    设置观察者方法

        override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
            print(keyPath)
            print(object)
            print(change)
            //一旦被观察的对象值发生改变就会调用
            //监听存储属性
        }
    

    相关文章

      网友评论

          本文标题:Note 24 ScrollView,观察者,两种文件管理结合

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