2017年5月17日水曜日

NSTimerを使って時計表示をしてみる(2)

Timerの生成とRun Loopの登録を別に行う方法です。
NSTimerは毎回作らないといけない模様 (使いまわそうとしても開始しなかった為)

---
import UIKit

class ViewController: UIViewController {

    var count:Int = 0
    var timer:NSTimer? = nil     // タイマー
   
   
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        /*
        timer = NSTimer(timeInterval: 0.01,        // 繰り返し時間(秒)
                        target: self,
                        selector: (#selector(ViewController.DispWatchCount)),    // ハンドラの指定
                        userInfo: nil,
                        repeats: true    // 繰り返し
        )
        NSRunLoop.currentRunLoop().addTimer(timer!, forMode: NSDefaultRunLoopMode)
         */
       
    }

    func update() {
        print("timer")
    }
   
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBOutlet weak var DispTime: UILabel!
   
    @IBAction func stop(sender: AnyObject) {
        timer?.invalidate()
    }
   
    @IBAction func ButtonStart(sender: AnyObject) {
        timer = NSTimer(timeInterval: 0.01,        // 繰り返し時間(秒)
            target: self,
            selector: (#selector(ViewController.DispWatchCount)),    // ハンドラの指定
            userInfo: nil,
            repeats: true    // 繰り返し
        )  // Timerを生成

        NSRunLoop.currentRunLoop().addTimer(timer!, forMode: NSDefaultRunLoopMode)  // timerを開始 (Run Loopに登録)
    }

    @IBAction func ButtonStop(sender: AnyObject) {
        timer?.invalidate()     // timerを停止
    }
   
    // Timer handler
    func DispWatchCount(){
        let date = NSDate()
       
        let formatter = NSDateFormatter()
        formatter.dateFormat = "HH:mm:ss:SS"
        let dispTime = formatter.stringFromDate(date)
       
        /* メンバーにアクセスする場合
        let calender = NSCalendar.currentCalendar()
        let component = calender.components([NSCalendarUnit.Year, NSCalendarUnit.Month, NSCalendarUnit.Day, NSCalendarUnit.Hour, NSCalendarUnit.Minute, NSCalendarUnit.Second], fromDate: date)
        let dispTime = String(component.hour) + ":" + String(component.minute) + ":" + String(component.second)
        */
        DispTime.text = dispTime
        // count += 1
        // DispTime.text = String(count)
    }
}

2017年5月16日火曜日

NSTimerを使って時計表示をしてみる(1)

timerの生成とRunloopへの登録...を同時に行う方法らしいです

1. タイマーを起動する
param3がtimerハンドラを指定
        NSTimer.scheduledTimerWithTimeInterval(
    0.01,     // 繰り返す時間(秒)
    target: self,
    selector: (#selector(ViewController.DispWatchCount)),  // ハンドラ
    userInfo: nil,
    repeats: true    //リピート実行
   )

2. timerハンドラの記述
    func DispWatchCount(){
       ...
    }
 
ちなみに等幅フォントとして時計表示部分は Courier 50.0 を使用

---
import UIKit

class ViewController: UIViewController {

    var count:Int = 0
   
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
       
        NSTimer.scheduledTimerWithTimeInterval(0.01, target: self, selector: (#selector(ViewController.DispWatchCount)), userInfo: nil, repeats: true)
       
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBOutlet weak var DispTime: UILabel!
    // Timer handler
    func DispWatchCount(){
        let date = NSDate()
       
        let formatter = NSDateFormatter()
        formatter.dateFormat = "HH:mm:ss:SS"
        let dispTime = formatter.stringFromDate(date)
       
        /* メンバーにアクセスする場合
        let calender = NSCalendar.currentCalendar()
        let component = calender.components([NSCalendarUnit.Year, NSCalendarUnit.Month, NSCalendarUnit.Day, NSCalendarUnit.Hour, NSCalendarUnit.Minute, NSCalendarUnit.Second], fromDate: date)
        let dispTime = String(component.hour) + ":" + String(component.minute) + ":" + String(component.second)
        */
        DispTime.text = dispTime
    }
}

2017年5月15日月曜日

JSONを読む(Array編)

こんな感じのJSONを読みます

{{"midashi":
[{"hoge":"1", "imageurl":"htt://www.hoge.com/uri01.png"},
 {"hoge":"2", "imageurl":"htt://www.hoge.com/uri02.png"},
 {"hoge":"3", "imageurl":"htt://www.hoge.com/uri03.png"}]
}

// NSUrlSessionの取得ハンドラ
    func onFinishGetUri(data: NSData?, res: NSURLResponse?, error: NSError?){
        var dict:NSDictionary
        do{
            dict = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers) as! NSDictionary
            let imageList = dict["midashi"] as! NSArray
           
            for image in imageList{
                let url = image["imageurl"] as! String
                print(url)
                getList.append(url)  // 詰め直してみる
            }
            // index0のurlを取得
            print(getList[0])           
        } catch {
            print("error")
            return
        }
    }

2017年5月14日日曜日

JSONを読む(Dictionary編)

こんな感じのデータのvalueを読みます
{"hogedata":"http://hoge.com/image/hoge.png"}




// NSUrlSessionのハンドラ
    func onFinishUri(data: NSData?, res: NSURLResponse?, error: NSError?){
        var dict:NSDictionary
        do{
            dict = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers) as! NSDictionary
            // let str = String(data)
            // print(str)        // {"hogedata":"http://hoge.com/image/hoge.png"}
            let uri = dict["hogedata"] as! String // URLを取得
            print(uri)
        } catch {
            print("error")
            return
        }
    }

2017年5月13日土曜日

NSUrlSessionでハンドラを指定して画像を取得・表示する

1. UIImageをMain.storyboardに貼る
2. UIImageからviewController.swiftにIBOutletを貼る
3. NSUrlSessinoで取得した時のハンドラを書く
    // 画像を取得した時に呼び出されるハンドラ
    func onFinishImage(data: NSData?, res: NSURLResponse?, error: NSError?){
        uiImage = UIImage(data: data!)!
        // バックグラウンドだとUIの処理が出来ないので、メインスレッドでUIの処理を行わせる.
        dispatch_async(dispatch_get_main_queue(), {
            self.uiImageView.image = self.uiImage
        })

        // 続きの処理があればこの辺に書いておく
    }
4. NSUrlSessinでデータを取得する処理を書く(データ取得後は↑のハンドラを呼び出すようにする)
    func getImageImg(uri:String){
        let url = NSURL(string: uri)
        let urlSession = NSURLSession.sharedSession()
        let task = urlSession.dataTaskWithURL(url!, completionHandler: onFinishImage)
        task.resume()
    }

5. ViewDidLoadなどで↑を呼び出す
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        let urlString = "http://hogehoge.co.jp/hoge.img"
        getImageImg(urlString)
    }