とりあえずブログ

プログラミングとiPhoneアプリの作り方を勉強中です。

今日やったこと(H27.12.22)

昨日、ポチった本がもう来ました!
早いな〜(@@)

f:id:onetoonewao:20151223054316p:plain

アプリ道場での余談の中で、あきお先生に勧められた本です。
楽しく読みやすい!(^^)
第1章の「フーリエ級数」を読んでいます。

実は、音を拾って活用するアプリ、いつか作りたいものの1つです。
音声を文字に変換するアプリなども実際に出ています。
素人が手を出せないほど難しいものかもしれませんが、せめてその原理だけでもまず知っておきたいです。
そのためにとても役立ちそう!
これを読みながら、犬のアプリを作り、SpriteKitの勉強をして...と体が3つ、いえ5つくらい欲しいですね!\(^o^)/

<アプリ制作>

今日は、昨日作ったくるくる回転する星をタッチすると色が変わるアプリを、UIKitを使って書き直してみました。
今回は、画像名に数字を入れてタッチするたびにカウントアップされる変数と連動して、画像が変わるようにしました。
star1.png : オレンジ色の星
star2.png : 赤色の星
star3.png : 青色の星
としています。

import UIKit

class ViewController: UIViewController {
    
    var star:UIImageView!
    var count = 0

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        
        //星のオブジェクトを作成
        star = UIImageView(frame: CGRectMake(0,0,100,100))
        star.center = CGPoint(x:self.view.frame.width/2, y:self.view.frame.height/2)
        star.image = UIImage(named: "star1.png")
        self.view.addSubview(star)
        
        //星を回転させる
        let animation : CABasicAnimation = CABasicAnimation(keyPath: "transform")
        animation.fromValue = 0
        animation.toValue = M_PI*2
        animation.valueFunction = CAValueFunction(name: kCAValueFunctionRotateZ)
        animation.duration = 2
        animation.repeatCount = Float.infinity
        star?.layer.addAnimation(animation, forKey: nil)
        
        star.userInteractionEnabled = true
    }

    //タッチで呼ばれる
    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        
        //タッチされた座標を取得
        let touch = touches.first as UITouch!
        let location = touch.locationInView(self.view)
        
        //タッチされた座標が、星のviewと重なったら
        if (CGRectContainsPoint(star.frame, location)){
            
            //カウントアップ
            count++
            
            //カウント数と連動して画像を切り替える
            let name = "star\(count%3 + 1).png"
            star.image = UIImage(named: name)
        }
    }

一応狙い通りのものは作れましたが、時間がかかりました。
まず、くるくる回転するviewを作るのは、結構大変でした。
1回転だけでしたらanimateWithDurationで実装できますが、連続して回転させる方法がどうしても見つからず、今回こちらを参考にさせていただきました。

Core Animation で画像を回す
blog.fenrir-inc.com

X軸やY軸で回転させることもできるので、色々応用できそうです。
以下はY軸で回転させたものです。

複雑なアニメーションをさせる場合、animateWithDurationを使うとインデントが深くなってしまいますが、SpriteKitは幾つかのアニメーションを列挙して、順番に、または同時にアニメーションさせることが簡潔に実装できるのがいいなと思います。
昨日のコードに手を加えて、使い慣れていこうと思います。

アプリ道場の講座から2日経ちましたが、ペアプログラミングで感じたことが、当初思っていたよりも今の私の課題を浮き彫りにしてくれたのではないかと時間が経つほどにじわじわと感じています。
時間制限がある・覚えたばかりのコード・何を作るか考えていない(朝、電車の中で考えようと思っていたのですが、寝てしまったのです;;)という条件下では、「今の自分にできること」を見極めて「その範囲でできること」を組み立てることが求められます。
実は、恥ずかしい話ですが時間が迫ってきた時
「どうしよう(o_o)...」
と頭の中が一瞬真っ白になってしまいました。
すっかり面の皮が厚くなっている今日この頃、こんな感覚は何年ぶり...ある意味新鮮でしたww
つまり
・多少焦っていてもスラスラ書けるくらい、身についているものがあること
・それを元にある程度現実味のある見通しを立てること
ができるようになるためには、自分の力を地道に底上げしていくことが必要そう。。。
どうやったらいいのかな??やっぱり繰り返しかな...
筋トレはあまり好きではないタイプwですが、これはもうやるっきゃないですね(๑˃̵ᴗ˂̵)و