スクリーンセーバー的なものを作る
しばらくプログラミングから離れていたので、これもまた地味に時間かかった・・・
あまりよくない書き方をしているような気がするので、もし訂正箇所があればコメント等でお願いします。
NSTimerがもっと正確な時間で作動して欲しいという場合は、
・var timeCount : Int = 0 のIntをFloatに
・NSTimer.scheduledTimerWithTimeInterval(1, target: self ...の1を0.1に
・timeCount += 1 を0.1に
・timeCount = 0 を0.0に
・if touchCount == 1 && timeCount == 4 { ... のtimeCountを4.0に
してあげれば良いかと思います(未検証)。もちろん、4秒はお好みで。
流れとしては、
1.起動して画像1表示
2.タッチすると画像2を表示
3.4秒経つと画像3を表示、タッチされなければこのまま画像3を表示
4.2と3を繰り返す
となっています。画像3のところでアニメーションを再生してあげるようにすれば、それっぽくなるのかな。
もちろん、1と3(画像1と3)の画像を同じにしてあげても良いと思います。今回は区別がつきやすいように変えてみました。
import UIKit class ViewController: UIViewController { @IBOutlet weak var screensaver: UIImageView! //タッチされた回数を示す変数 var touchCount = 0 //時間を示す変数 var timeCount : Int = 0 //タイマー var timer: NSTimer? override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. screensaver.image = UIImage(named: "iPhone4ViewPic.png") } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } //タッチされたか検知する override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) { for touch: AnyObject in touches { //タッチされたらタイマー始動(1秒ごと・整数) timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "timeUpdate:", userInfo: nil, repeats: true) //タッチされたら1足す touchCount += 1 //スクリーンセーバーが起動していないときの画像 screensaver.image = UIImage(named: "iPhone4ViewPic2.png") } } func timeUpdate(timer : NSTimer){ //1秒ごとに1足す timeCount += 1 println("タイム= \(timeCount)") //タッチされてかつ4秒以上たったら、スクリーンセーバー始動&タイマー止まる。またタッチされたらタイマー始動 if touchCount == 1 && timeCount == 4 { touchCount = 0 timeCount = 0 //タイマー停止 self.timer?.invalidate() self.timer = nil //スクリーンセーバーの画像表示 screensaver.image = UIImage(named: "iPhone4ViewPic3.png") } } }