ノート24 ScrollView、オブザーバー、2つのファイル管理を組み合わせた

6326 ワード

JSONFile
  • オブジェクト属性を辞書に保存する
  • 辞書JSON化
  • 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()
  • let ud = NSUserDefaults.standardUserDefaults()
  • let fileManager = NSFileManager.defautlManager()
  • ...など
  • fileMangerオブジェクトlet fileManager = NSFileManager.defaultManagerの取得
    FileExistAtPathファイルが存在するか否かを判断する
    removeItemAtPathファイルの削除
    creatFileAtPath NSDataに書き込むファイルを作成する
    フォルダの作成
            //     
            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オブジェクトの作成->オブジェクトを作成するコンストラクション関数の3つ
  • 読取り専用
  • とのみ書きます
  • update(both)

  • 異なるファイルIDタイプでは、関連する操作のみが実行されます.offsetオブジェクトごとに1回操作が完了すると、現在の操作の位置がポインタに記録され、次回は同じオブジェクト操作を継続することができます.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
    2つの特徴
  • スクロール
  • ズーム
  • UIscroollViewをスクロールできますか?
  • scrollEnabled
  • contentSize:(0,0)コンテンツサイズは、
  • をスクロールするには、自分のサイズを超える必要があります.
    UIscrollViewズーム
    プロトコルエージェントUIscrollViewDelegateのscrollViewDidZoomメソッドを実装することによって、UIView(クラス)のサブビューが返され、このビューはスケーリング可能である
        func scrollViewDidZoom(scrollView: UIScrollView) {
            
        }
    

    UIscroollViewのプロパティ設定
  • pagingEnabledページング
  • scrollView.contextInset=UIedgeInsets()エッジギャップ
  • を設定
  • scrollView.contextOffset=CGPoint()オフセット/正方向の設定:左、上(ドラッグ方向)
  • scrollView.DirectionalLockEnabled/Boolは一度に
  • を一方向にスクロールすることを許可する.
  • scrollView.bounces/Bool弾性効果
  • scrollView.showHorizontalScrolIndicator/Vertical表示スライドインジケータ
  • は、setContentOffsetおよびscrollRectToVisibleによって、1つの点にオフセット、または1つの矩形領域を表示することによって、ビューオフセット
  • を実現することができる.
    UIscrollViewDelegateのいくつかの方法:
    ScrollView停止のタイミング
        //      
        //       ,    
        //     ,    ,    ,    
        //    
        func scrollViewDidEndDragging(scrollView: UIScrollView, willDecelerate decelerate: Bool) {
            if decelerate {
                print("EndDragging,   ")
            }
            else {
                print("EndDragging,    ")
            }
        }
         //    
        func scrollViewDidEndDecelerating(scrollView: UIScrollView) {
            print("    ")
        }
    

    CollectionViewは、ScrolViewを継承し、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) {
            print(keyPath)
            print(object)
            print(change)
            //                 
            //      
        }