Swiftで遊ぼう! on Hatena

あしたさぬきblogでやってた初心者オヤジのiOSプログラミング奮闘記がHatenaに来ました

Swiftで遊ぼう! - 852 - UserDefaultsクラスの書き換え

Swift 3向けに書き換えています。Udemyの講義を聴きながら復習を兼ねてブログ記事の書き換えです。

yataiblue.hatenablog.com
yataiblue.hatenablog.com

これだけ。

Swiftで遊ぼう! - 851 - UdemyのiOS講座受講してます

週末にブラックフライデーセールってやつをしてました。今回次の講座がセールになっていたので登録しました。

www.udemy.com

只今セクション12まで終了しています。スタンフォード大学のポール先生と比較なんかできませんが、シンプルに説明が進んでいて、理解が難しい箇所は「定型文なんで覚えてください」てな感じで流されています。

ポール先生の授業を聞いているので、私には分かりますが、これで初心者は納得できるのだろうか? 理解できない箇所があると先に進めない私のような人間には辛いかもしれません。

それでも、今の私には総復習になっています。意外に知らない箇所もあり勉強になっています。

Swiftで遊ぼう! - 850 - 今更ながら定数と変数の説明を追加

初心者向けに内容を変更しています。

今更ながら定数と変数の説明を変更しました。下記の記事の定数と変数の説明文を改訂しました。

yataiblue.hatenablog.com

ちょっとした変更ですが、しっかり理解することが重要です。

これだけ。

Swiftで遊ぼう! - 849 - Big-O 表記法

プログラミングの真骨頂はアルゴリズムですよね。今までiOSフレームワークの勉強ばかりしていて疲れました。少しアルゴリズムを考えないといけませんね。アルゴリズムのパフォーマンスを表現するときにBig-O(ビッグ・オー)notation(表記法)があります。

github.com

ものすごくシンプルに分かりやすい解説でした。

ちょっとずつ進歩します。

Swiftで遊ぼう! - 848 - 水島企画さんのサンプルに挑戦

Sprite Kitの勉強をしていたので、水島企画さんのサイトを見つけることができました。豊富なサンプルコードを公開してくれているので勉強になります。

Objective-Cで書かれたコードを自分なりにSwift 3に書き換えてみたのですが、サンプルというスタンスのせいか、実用的なMVC構造になっていないので違和感を感じます。取りあえず公開します。

Single View Applicationのプロジェクトを作って、ModelSceneというSKSceneを継承したファイルも作ってみます。

import UIKit
import SpriteKit

class ModelScene: SKScene {
    
    let myLabel = SKLabelNode(fontNamed:"Chalkduster")
    
    override func didMove(to view: SKView) {
        /* Setup your scene here */
        myLabel.text = "Card"
        myLabel.fontSize = 45
        myLabel.position = 
CGPoint(x: self.frame.midX, y:self.frame.midY - 20)
        self.addChild(myLabel)
    }
    
}

そしてViwControllerを次のようにします。

import UIKit
import SpriteKit

class ViewController: UIViewController {
    
    weak var scene: ModelScene?
    
    var isCircular: Bool = false
    
    override func viewDidLoad() {
        super.viewDidLoad()
        setupScene()
        createCard()
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
    func setupScene() {
        let spriteKitView = SKView(frame: view.bounds)
        let modelScene = ModelScene(size: spriteKitView.frame.size)
        modelScene.backgroundColor = UIColor.init(hue: 0.25, 
                                           saturation: 1, 
                                           brightness: 0.4, 
                                                alpha: 1)
        spriteKitView.presentScene(modelScene)
        view.addSubview(spriteKitView)
        scene = modelScene
    }
    
    func createCard() {
        let dw: Double = 2.0 * M_PI / 53.0
        for i in 0...53 {
            let w = dw * Double(i)
            let card = SKSpriteNode()
            card.name = "card"
            card.position = CGPoint(x: view.frame.midX, 
                                    y: view.frame.midY)
            scene?.addChild(card)
            
            let cardShape = SKShapeNode(rect: CGRect(x: 8, 
                                                     y: -12, 
                                                 width: 16,
                                                height: 24), 
                                          cornerRadius: 2)
            cardShape.lineWidth = 2
            cardShape.position = CGPoint(x: 0, y: 100)
            cardShape.fillColor = UIColor.red
            cardShape.strokeColor = 
                UIColor.white.withAlphaComponent(0.5)
            card.addChild(cardShape)
            card.zPosition = CGFloat(w)
        }
        isCircular = true
    }
    
    override func touchesBegan(_ touches: Set<UITouch>, 
                              with event: UIEvent?) {
        scene?.children
            .filter { $0.name == "card" }
            .enumerated().forEach{(index, node) in
            let duration: Double = 3.0
            let waittime = (duration / 52.0) * (52.0 - Double(index))
            if self.isCircular {
                node.run(
                    SKAction.group([
                      SKAction.wait(forDuration: duration),
                      SKAction.rotate(toAngle: 0, 
                                     duration: duration - waittime)]))
                print(index)
            } else {
                let w = (2.0 * M_PI / 52.0) * Double(index)
                node.run(
                    SKAction.rotate(toAngle: CGFloat(w), 
                                   duration: duration - waittime))
                print("backwords:\(index)")
            }
        }
         self.isCircular = !self.isCircular
    }
    
}

すると次のようになります。解説は今後加えます。

f:id:yataiblue:20161122001542j:plain

カードで輪

Swiftで遊ぼう! - 847 - 画像の取り扱いに関する記事をSwift 3に書き直しました

やっぱり復習するスピードは上がっていますね。過去の記事を次々にSwift 3に変更していきます。

yataiblue.hatenablog.com

Swift 3向けに書き直しました。

Swiftで遊ぼう! - 846 - なんか凄すぎて凹んでいます(^_^;)

最近、怒濤の勢いでプログラミングの腕を上げているアプリ魂さん、私と同じように大人の趣味として始めたプログラミングの勉強... 私は2014年から初めているのにまだ初心者レベル、しかし彼は2016年9月から... 同じ大人の趣味なのに、この差はいったい何なんだ!

能力のある人間は羨ましいですね。私のように能力の無い人間が本当にアプリを作る事ができるのだろうか?

小学2年生の娘が、今年の4月から百人一首の競技カルタを覚え始めました。私も娘と一緒に百人一首の暗記を始めたけど...

今や彼女は試合形式で練習をするレベル... しかし私は...

覚える事がこんなに辛くなるとは...

twitter.com

アプリ魂さんのエントリーを読んで溜息ばかりです(T_T)