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月17日水曜日
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
}
}
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
}
}
{{"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
}
}
{"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)
}
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)
}
登録:
投稿 (Atom)