ノート24 ScrollView、オブザーバー、2つのファイル管理を組み合わせた
6326 ワード
JSONFile オブジェクト属性を辞書に保存する 辞書JSON化 NSDataのwriteToメソッドでファイルに保存する
fileManger単例クラス:1つのオブジェクト のみ let app = UIApplication.sharedApplication() let ud = NSUserDefaults.standardUserDefaults() let fileManager = NSFileManager.defautlManager() ...など fileMangerオブジェクト
FileExistAtPathファイルが存在するか否かを判断する
removeItemAtPathファイルの削除
creatFileAtPath NSDataに書き込むファイルを作成する
フォルダの作成
fileHandle
FileHandleオブジェクトの作成->オブジェクトを作成するコンストラクション関数の3つ読取り専用 とのみ書きます update(both)
異なるファイルIDタイプでは、関連する操作のみが実行されます.
新しいfireHandleオブジェクトの読み書きはすべて0から始まります
操作が完了したら必ずCloseFile
SrollView
2つの特徴スクロール ズーム UIscroollViewをスクロールできますか? scrollEnabled contentSize:(0,0)コンテンツサイズは、 をスクロールするには、自分のサイズを超える必要があります.
UIscrollViewズーム
プロトコルエージェントUIscrollViewDelegateの
UIscroollViewのプロパティ設定 pagingEnabledページング scrollView.contextInset=UIedgeInsets()エッジギャップ を設定 scrollView.contextOffset=CGPoint()オフセット/正方向の設定:左、上(ドラッグ方向) scrollView.DirectionalLockEnabled/Boolは一度に を一方向にスクロールすることを許可する. scrollView.bounces/Bool弾性効果 scrollView.showHorizontalScrolIndicator/Vertical表示スライドインジケータ は、 を実現することができる.
UIscrollViewDelegateのいくつかの方法:
ScrollView停止のタイミング
CollectionViewは、ScrolViewを継承し、ScrollViewのプロパティもあります
KVC
SetValue-key/keyPath経由
KVO key - value observing
swiftではKVCで変化する値しか観察できません
オブザーバメソッドの設定
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
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つ
異なるファイル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つの特徴
UIscrollViewズーム
プロトコルエージェントUIscrollViewDelegateの
scrollViewDidZoom
メソッドを実装することによって、UIView(クラス)のサブビューが返され、このビューはスケーリング可能である func scrollViewDidZoom(scrollView: UIScrollView) {
}
UIscroollViewのプロパティ設定
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)
//
//
}