読者です 読者をやめる 読者になる 読者になる

まゆたまガジェット開発逆引き辞典

電子工作やプログラミングのHowtoを逆引き形式で掲載しています。作りたいモノを決めて学んでいくスタイル。プログラマではないので、コードの汚さはお許しを

スクリーンセーバー・スライドショーもどき:テキストのフェードイン/アウト

以前Objective-c用に書いたもの(テキストアニメーション部分のみ)をSwift用に移植します。
テキストが一定時間ごとにフェードイン/アウトして、これもなんちゃってスクリーンセーバーです。スライドショーかな、むしろ。テキストを絵に変換してあげてもいけるかと。
QuartzCore.freamworkを使わなくてもいけます。

テキストラベルとボタンを設置して、結びつけておきます。
配列の数やタイマー用のカウントをもう少しちゃんとすれば、きちんとしたものができると思います。
下のですと最初の「いち」から「に」にかけての表示だけ、フェードインアウト処理の挙動が少しおかしいです。すみません。

import UIKit

class ViewController: UIViewController {
    
    //フェードインアウト用タイマー
    var fadeInOutTimer: NSTimer?
    //テキストチェンジ用
    var textTimer: NSTimer?
    //フェードインアウト用タイマー変数
    var countTime = 0
    //テキストチェンジ用変数
    var textIndex: Int = 0
    //テキストチェンジ用配列
    let tenko = ["いち","に","さん","し","ご","ろく"]

    @IBOutlet weak var kabegami: UIImageView!
    @IBOutlet weak var sampleText: UILabel!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        kabegami.image = UIImage(named: "TestAppPict1.png")
         sampleText.text = "いち"
    }

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

    @IBAction func timerBtn(sender: AnyObject) {
        
        //フェードインアウト用タイマー
         fadeInOutTimer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "cdTimer:", userInfo: nil, repeats: true)
        //テキストチェンジタイミング用タイマー
        textTimer = NSTimer.scheduledTimerWithTimeInterval(8, target: self, selector: "textload:", userInfo: nil, repeats: true)
    }
    
    
    //フェードインアウト用タイマー
    func cdTimer(timer : NSTimer) {
        countTime += 1
       
        
        //countTime == 8はフェードインアウトのNSTimeIntervalの合計数
        if countTime == 8 {
             fadein()
            countTime = 0
            
        }
        
    }
    
    //テキストチェンジ用
    func textload(timer : NSTimer) {
        textIndex += 1
        
        //textIndex > 5の5は配列の数-1(配列の5番目までいったら最初の0番目に戻る)
        if textIndex > 5 {
            textIndex = 0
        }
        
        //表示したいテキストを格納した配列の中で何番目(textIndex)を読み込むか
        let textArray = tenko[textIndex]
        
        //配列の中で該当するものをテキストラベルに表示
        sampleText.text = textArray
    }
    
    
    //フェードイン処理
    func fadein() {
        //4秒かけてフェードイン処理を行う
        var changeFadeIn: NSTimeInterval = 4
        UIView.animateWithDuration( NSTimeInterval(changeFadeIn), animations: {
            //透明度が1になったらフェードアウト処理を行う
            self.sampleText.alpha = 1
            }
            , completion: { (finished: Bool) in
               
                self.fadeout()
        })
    }
    
//フェードアウト処理
    func fadeout(){
         //4秒かけてフェードアウト処理を行う
        var changeFadeOut: NSTimeInterval = 4
        UIView.animateWithDuration( NSTimeInterval(changeFadeOut), animations: {
            //透明度が0になったらフェードアウト処理終了
            self.sampleText.alpha = 0
            }
            , completion: { (finished: Bool) in
                
        })
    }




}