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月16日火曜日
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)
}
2017年4月20日木曜日
AVSpeechSynthesizerでテキスト読み上げ
テキストだけ差し替える方法があるかもしれないけど、読み上げテキストで初期化する方法でも大丈夫。
import UIKit
import AVFoundation
class ViewController: UIViewController {
var talker = AVSpeechSynthesizer()
let talkTxt = "こんにちわ、今日はいい天気ですね"
let talkText2 = "テキスト2"
let talkTextEng = "hello"
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
// 読み上げ内容を初期化
var utterance = AVSpeechUtterance(string: talkTxt)
// 日本語
utterance.voice = AVSpeechSynthesisVoice(language: "ja-JP")
// 読み上げ
self.talker.speakUtterance(utterance)
// 2回目
utterance = AVSpeechUtterance(string: talkText2)
utterance.voice = AVSpeechSynthesisVoice(language: "ja-JP") // defaultは英語なので毎回指定
self.talker.speakUtterance(utterance)
// 英語文を日本語で(読める)
utterance = AVSpeechUtterance(string: talkTextEng)
utterance.voice = AVSpeechSynthesisVoice(language: "ja-JP")
self.talker.speakUtterance(utterance)
// utterance.speechString = "こんにちわ" // get onlyなのでテキストのみ差し替えはできない?
// self.talker.speakUtterance(utterance)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
import UIKit
import AVFoundation
class ViewController: UIViewController {
var talker = AVSpeechSynthesizer()
let talkTxt = "こんにちわ、今日はいい天気ですね"
let talkText2 = "テキスト2"
let talkTextEng = "hello"
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
// 読み上げ内容を初期化
var utterance = AVSpeechUtterance(string: talkTxt)
// 日本語
utterance.voice = AVSpeechSynthesisVoice(language: "ja-JP")
// 読み上げ
self.talker.speakUtterance(utterance)
// 2回目
utterance = AVSpeechUtterance(string: talkText2)
utterance.voice = AVSpeechSynthesisVoice(language: "ja-JP") // defaultは英語なので毎回指定
self.talker.speakUtterance(utterance)
// 英語文を日本語で(読める)
utterance = AVSpeechUtterance(string: talkTextEng)
utterance.voice = AVSpeechSynthesisVoice(language: "ja-JP")
self.talker.speakUtterance(utterance)
// utterance.speechString = "こんにちわ" // get onlyなのでテキストのみ差し替えはできない?
// self.talker.speakUtterance(utterance)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
2017年4月5日水曜日
optionalとアンラップ
- nilを許可する場合はOptional型として "?"をつける
- 使用するときはアンラップ < "!"で強制アンラップ
let unlap = optionalString!
- オプショナルバインディングで安全にアンラップ
if let opt = optionalString { // オプショナルバインディングでfalse
print("アンラップしました -> " + opt)
}
// optionalとは??
var nonOptionalString:String = "hello" // optionalじゃなくString型
print(nonOptionalString)
nonOptionalString = "hoge"
print(nonOptionalString)
// nonOptionalString = nil // ここでエラー "nil cannot be assigned to type 'String'
// print(nonOptionalString) // nilを入れることが出来ない為
// optional型で宣言
var optionalString:String? = "hello" // ?をつけるとOptional型になる
print(optionalString) // Optinal("hello")と表示される
optionalString = nil // nil代入もOK
print(optionalString) // "nil"と表示される
if let opt = optionalString { // オプショナルバインディングでfalse
print("アンラップしました -> " + opt)
} else {
print("nilが入っている") // こっちが表示される
}
optionalString = "hoge"
if let opt = optionalString { // オプショナルバインディングでアンラップ
print("アンラップしました -> " + opt) // アンラップされたこっちが表示される
} else {
print("nilが入っている")
}
- 使用するときはアンラップ < "!"で強制アンラップ
let unlap = optionalString!
- オプショナルバインディングで安全にアンラップ
if let opt = optionalString { // オプショナルバインディングでfalse
print("アンラップしました -> " + opt)
}
// optionalとは??
var nonOptionalString:String = "hello" // optionalじゃなくString型
print(nonOptionalString)
nonOptionalString = "hoge"
print(nonOptionalString)
// nonOptionalString = nil // ここでエラー "nil cannot be assigned to type 'String'
// print(nonOptionalString) // nilを入れることが出来ない為
// optional型で宣言
var optionalString:String? = "hello" // ?をつけるとOptional型になる
print(optionalString) // Optinal("hello")と表示される
optionalString = nil // nil代入もOK
print(optionalString) // "nil"と表示される
if let opt = optionalString { // オプショナルバインディングでfalse
print("アンラップしました -> " + opt)
} else {
print("nilが入っている") // こっちが表示される
}
optionalString = "hoge"
if let opt = optionalString { // オプショナルバインディングでアンラップ
print("アンラップしました -> " + opt) // アンラップされたこっちが表示される
} else {
print("nilが入っている")
}
2017年4月2日日曜日
http requestをNSURLSessionのdelegateで
NRURLSessionでhttp requestの結果をdelegateで受けてみます。
//
// ViewController.swift
//
import UIKit
class ViewController: UIViewController, NSURLSessionDelegate, NSURLSessionDataDelegate {
@IBOutlet weak var urlDataDisp: UITextView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
getUrlData("http://tantan2014.blogspot.jp/2017/01/mapkit-viewannotation.html")
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func getUrlData(targetUri: String){
// 通信用のConfigを生成.
let config: NSURLSessionConfiguration = NSURLSessionConfiguration.backgroundSessionConfigurationWithIdentifier("backgroundTask")
// Sessionを生成.
let session: NSURLSession = NSURLSession(configuration: config, delegate: self, delegateQueue: nil)
// 通信先のURLを生成.
let url: NSURL = NSURL(string: targetUri as String)!
// タスクの生成.
let task: NSURLSessionDataTask = session.dataTaskWithURL(url)
// タスクの実行.
task.resume()
}
/*
通信が終了したときに呼び出されるデリゲート.
*/
func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, didReceiveData data: NSData) {
print("NSURLSessionDataTask")
// 帰ってきたデータを文字列に変換.
let getData: NSString = NSString(data: data, encoding: NSUTF8StringEncoding)!
// バックグラウンドだとUIの処理が出来ないので、メインスレッドでUIの処理を行わせる.
dispatch_async(dispatch_get_main_queue(), {
self.urlDataDisp.text = getData as String
})
}
/*
バックグラウンドからフォアグラウンドの復帰時に呼び出されるデリゲート.
*/
func URLSessionDidFinishEventsForBackgroundURLSession(session: NSURLSession) {
print("URLSessionDidFinishEventsForBackgroundURLSession")
}
}
ご説明はこちらが詳しいです。
http://qiita.com/aKentaKoyama/items/96a979ab3a140e7b39ec
//
// ViewController.swift
//
import UIKit
class ViewController: UIViewController, NSURLSessionDelegate, NSURLSessionDataDelegate {
@IBOutlet weak var urlDataDisp: UITextView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
getUrlData("http://tantan2014.blogspot.jp/2017/01/mapkit-viewannotation.html")
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func getUrlData(targetUri: String){
// 通信用のConfigを生成.
let config: NSURLSessionConfiguration = NSURLSessionConfiguration.backgroundSessionConfigurationWithIdentifier("backgroundTask")
// Sessionを生成.
let session: NSURLSession = NSURLSession(configuration: config, delegate: self, delegateQueue: nil)
// 通信先のURLを生成.
let url: NSURL = NSURL(string: targetUri as String)!
// タスクの生成.
let task: NSURLSessionDataTask = session.dataTaskWithURL(url)
// タスクの実行.
task.resume()
}
/*
通信が終了したときに呼び出されるデリゲート.
*/
func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, didReceiveData data: NSData) {
print("NSURLSessionDataTask")
// 帰ってきたデータを文字列に変換.
let getData: NSString = NSString(data: data, encoding: NSUTF8StringEncoding)!
// バックグラウンドだとUIの処理が出来ないので、メインスレッドでUIの処理を行わせる.
dispatch_async(dispatch_get_main_queue(), {
self.urlDataDisp.text = getData as String
})
}
/*
バックグラウンドからフォアグラウンドの復帰時に呼び出されるデリゲート.
*/
func URLSessionDidFinishEventsForBackgroundURLSession(session: NSURLSession) {
print("URLSessionDidFinishEventsForBackgroundURLSession")
}
}
ご説明はこちらが詳しいです。
http://qiita.com/aKentaKoyama/items/96a979ab3a140e7b39ec
登録:
投稿 (Atom)