質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.51%

  • Swift

    8730questions

    Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

  • Xcode

    4912questions

    Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

  • iOS

    4679questions

    iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

swiftでアナログ時計を作ってみたのですが、simulatorで表示されない。

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,124

引用テキスト

前提・実現したいこと

アナログ時計を作成し、時計を表示させたいです

発生している問題・エラーメッセージ

実行は問題なくできるんですが、Simulatorで動かしてみると何も映りません。
どこか問題があればご指摘お願いいたします。

該当のソースコード

import SpriteKIt
        class GameScene: SKScene {
    let sHand=SKSpriteNode(color: UIColor.black, size: CGSize(width: 2, height: 180));
    let mHand=SKSpriteNode(color: UIColor.black, size: CGSize(width: 5, height: 180));
    let hHand=SKSpriteNode(color: UIColor.black, size: CGSize(width: 5, height: 140));

    var last:CFTimeInterval!;
    var lastM:CFTimeInterval!;
    var lastH:CFTimeInterval!;
    var myDate:NSDate!;
    var myComponetns:NSDateComponents!;
    var myCalendar: NSCalendar!;
    var _sec:Double!;
    var _min:Double!;
    var _hour:Double!;

    func DegreeToRadian(Degree:Double)->CGFloat{
        return CGFloat(Degree)/CGFloat(180.0*M_1_PI)
    }

    override func didMove(to view: SKView) {
        /* Setup your scene here */

        myDate = NSDate();
        //カレンダーを取得.
        myCalendar = NSCalendar(calendarIdentifier: NSCalendar.Identifier.gregorian)!

        //取得するコンポーネントを決める.
        // myComponetns = myCalendar.component(<#T##unit: NSCalendar.Unit##NSCalendar.Unit#>, from: <#T##Date#>)

        /*  myComponetns = myCalendar.components(
         NSCalendar.Unit.hour,
         NSCalendar.Unit.minute,
         NSCalendar.Unit.second,
         from: myDate )
         */
        myComponetns = myCalendar.components(
            [
                //   NSCalendar.Unit.year,
                //   NSCalendar.Unit.month,
                //   NSCalendar.Unit.day,
                NSCalendar.Unit.hour,
                NSCalendar.Unit.minute,
                NSCalendar.Unit.second,
                //   NSCalendar.Unit.weekday
            ],from: myDate as Date) as NSDateComponents!
        _sec=Double(myComponetns.second * -6 );
        _min=Double(myComponetns.minute * -6);
        _hour=Double((myComponetns.hour-12) * -30);

        //盤面
        // ShapeNodeを作成.
        let Circle = SKShapeNode(circleOfRadius: 190)

        // ShapeNodeの座標を指定.
        Circle.position = CGPoint(x:self.frame.midX, y:self.frame.midY)

        // ShapeNodeの塗りつぶしの色を指定.
        Circle.fillColor = UIColor.white
        Circle.zPosition=CGFloat(-2.0)
        // sceneにShapeNodeを追加.
        self.addChild(Circle)
        var cArr:[SKShapeNode]=[];
        for i in 1...60 {

            let memori=SKSpriteNode(color: UIColor.gray, size: CGSize(width: 1, height: 14));
            // ShapeNodeの座標を指定.
            memori.position = CGPoint(x:self.frame.midX, y:self.frame.midY)

            memori.position=CGPoint(x:self.frame.midX, y:self.frame.midY)
            memori.zPosition=CGFloat(2.0)
            memori.anchorPoint = CGPoint(x: 0.5, y: -12);

            memori.zRotation = DegreeToRadian(Degree: Double(-6 * i))
            //cArr.append(Circle2);
            self.addChild(memori)

        }

        for i in 1...12 {

            let memori=SKSpriteNode(color: UIColor.black, size: CGSize(width: 5, height: 14));
            // ShapeNodeの座標を指定.
            memori.position = CGPoint(x:self.frame.midX, y:self.frame.midY)

            memori.position=CGPoint(x:self.frame.midX, y:self.frame.midY)
            memori.zPosition=CGFloat(2.0)
            memori.anchorPoint = CGPoint(x: 0.5, y: -12);

            memori.zRotation = DegreeToRadian(Degree: Double(-30 * i))
            //cArr.append(Circle2);
            self.addChild(memori)

        }

        //四角形の描画
        //秒
        sHand.position = CGPoint(x:self.frame.midX, y:self.frame.midY);
        sHand.anchorPoint = CGPoint(x: 0.5, y: 0);
        sHand.zRotation=DegreeToRadian(Degree: _sec);
        self.addChild(sHand)

        //分
        mHand.position = CGPoint(x:self.frame.midX, y:self.frame.midY);
        mHand.anchorPoint = CGPoint(x: 0.5, y: 0);
        mHand.zRotation=DegreeToRadian(Degree: _min+(6*(_sec/360)));
        print(_min+(6*(_sec/360)))
        self.addChild(mHand)

        //時
        hHand.position = CGPoint(x:self.frame.midX, y:self.frame.midY);
        hHand.anchorPoint = CGPoint(x: 0.5, y: 0);
        hHand.zRotation = DegreeToRadian(Degree: _hour + (30*(_min/360)));
        print(_hour)
        self.addChild(hHand)

    }

    func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent) {
        /* Called when a touch begins */
    }

    override func update(_ currentTime: CFTimeInterval) {
        /* Called before each frame is rendered */
        myDate = NSDate();
        /*
         myComponetns = myCalendar.component(
         NSCalendar.Unit.CalendarUnitHour |
         NSCalendar.Unit.CalendarUnitMinute ,
         NSCalendar.Unit.CalendarUnitSecond ,
         fromDate: myDate)
         */
        myComponetns = myCalendar.components(
            [
                // NSCalendar.Unit.year,
                // NSCalendar.Unit.month,
                // NSCalendar.Unit.day,
                NSCalendar.Unit.hour,
                NSCalendar.Unit.minute,
                NSCalendar.Unit.second,
                //  NSCalendar.Unit.weekday
            ],from: myDate as Date) as NSDateComponents!
        _sec=Double(myComponetns.second * -6 );
        _min=Double(myComponetns.minute * -6);
        _hour=Double((myComponetns.hour-12) * -30);

        sHand.zRotation=DegreeToRadian(Degree: _sec)
        mHand.zRotation=DegreeToRadian(Degree: _min+(6*(_sec/360)))
        hHand.zRotation=DegreeToRadian(Degree: _hour + (30*(_min/360)));

    }
    }

試したこと

背景色の変更

補足情報(言語/FW/ツール等のバージョンなど)

swift 3.0

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

0

自分の環境だとシミュレータで実行できました。SpriteKItをSpriteKitに修正しましたが...
クリーンしてみたらどうでしょうか。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/12/24 21:47

    遅くなってしまい。申し訳ありません。そうでしたか!それではやはり自分のシュミレータがおかしいのですね。。
    クリーンとは再インストールということでしょうか??

    キャンセル

  • 2016/12/25 01:25

    クリーンビルドです。shift + option + command + k

    キャンセル

  • 2016/12/26 02:25

    クリーンビルドして、xcodeを再インストールでもダメでした。
    原因としてはsimulatorが問題の確率の方が高いのでしょうか。

    キャンセル

0

解決していたら無視してください
Xcode Version 8.2.1、Simulator Version 10.0を使用している場合で解説いたします、Xcodeで File → New → projectでGameを選択してお好みのProduct NameでLanguageはswift、Game TechnologyはSpriteKitを選択して作成します、作成されたGameScene.swiftを書き換えてください、これで私の環境ではSimulatorで時計とHello Worldが表示します
また、ご存知と思いますがGameScene.swiftのclass GameScene名をGameSecne1とかに変更したらGameScene.sksのCustom Class名も同様にGameSecne1に変更すれば時計は表示します、また、GameScene.sksのScene Colarを変更すれば背景色が変化します、参考になれば幸いです

import SpriteKit
import GameplayKit

class GameScene: SKScene {

    let sHand = SKSpriteNode(color: UIColor.red, size: CGSize(width: 2, height: 180))
    let mHand = SKSpriteNode(color: UIColor.black, size: CGSize(width: 5, height: 180))
    let hHand = SKSpriteNode(color: UIColor.black, size: CGSize(width: 5, height: 140))

    //var last: CFTimeInterval!
    //var lastM: CFTimeInterval!
    //var lastH: CFTimeInterval!
    var myDate: NSDate!
    var myComponetns: NSDateComponents!
    var myCalendar: NSCalendar!
    var sec: Double!
    var min: Double!
    var hour: Double!

    func DegreeToRadian(Degree:Double) -> CGFloat {
        return CGFloat(Degree) / CGFloat(180.0 * M_1_PI)
    }



    override func didMove(to view: SKView) {

        myDate = NSDate()
        //カレンダーを取得.
        myCalendar = NSCalendar(calendarIdentifier: NSCalendar.Identifier.gregorian)!

        //取得するコンポーネントを決める.
        myComponetns = myCalendar.components([.hour, .minute, .second], from: myDate as Date) as NSDateComponents!
        sec = Double(myComponetns.second * -6 )
        min = Double(myComponetns.minute * -6)
        hour = Double((myComponetns.hour-12) * -30)

        //盤面
        // ShapeNodeを作成.
        let Circle = SKShapeNode(circleOfRadius: 190)

        // ShapeNodeの座標を指定.
        Circle.position = CGPoint(x: frame.midX, y: frame.midY)

        // ShapeNodeの塗りつぶしの色を指定.
        Circle.fillColor = UIColor.white
        Circle.zPosition = CGFloat(-2.0)

        // sceneにShapeNodeを追加.
        self.addChild(Circle)
        //var cArr: [SKShapeNode] = []
        for i in 1...60 {

            let memori=SKSpriteNode(color: UIColor.gray, size: CGSize(width: 1, height: 14))
            // ShapeNodeの座標を指定.
            memori.position = CGPoint(x: self.frame.midX, y: self.frame.midY)

            memori.zPosition = CGFloat(2.0)
            memori.anchorPoint = CGPoint(x: 0.5, y: -12)

            memori.zRotation = DegreeToRadian(Degree: Double(-6 * i))
            //cArr.append(Circle2)
            addChild(memori)

        }

        for i in 1...12 {

            let memori = SKSpriteNode(color: UIColor.black, size: CGSize(width: 5, height: 14))
            // ShapeNodeの座標を指定.
            memori.position = CGPoint(x: frame.midX, y: frame.midY)


            memori.zPosition = CGFloat(2.0)
            memori.anchorPoint = CGPoint(x: 0.5, y: -12)

            memori.zRotation = DegreeToRadian(Degree: Double(-30 * i))
            //cArr.append(Circle2)
            addChild(memori)

        }

        //四角形の描画
        //秒
        sHand.position = CGPoint(x: frame.midX, y: frame.midY)
        sHand.anchorPoint = CGPoint(x: 0.5, y: 0)
        sHand.zRotation = DegreeToRadian(Degree: sec)
        addChild(sHand)

        //分
        mHand.position = CGPoint(x: frame.midX, y: frame.midY)
        mHand.anchorPoint = CGPoint(x: 0.5, y: 0)
        mHand.zRotation = DegreeToRadian(Degree: min+(6*(sec/360)))
        print(min + (6 * (sec / 360)))
        addChild(mHand)

        //時
        hHand.position = CGPoint(x: frame.midX, y: frame.midY)
        hHand.anchorPoint = CGPoint(x: 0.5, y: 0)
        hHand.zRotation = DegreeToRadian(Degree: hour + (30 * (min / 360)))
        print(hour)
        addChild(hHand)
    }


    func touchDown(atPoint pos : CGPoint) {

    }

    func touchMoved(toPoint pos : CGPoint) {

    }

    func touchUp(atPoint pos : CGPoint) {

    }

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

    }

    override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {

    }

    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {

    }

    override func touchesCancelled(_ touches: Set<UITouch>, with event: UIEvent?) {

    }


    override func update(_ currentTime: TimeInterval) {
        // Called before each frame is rendered
        myDate = NSDate()
        myComponetns = myCalendar.components(
            [.hour, .minute, .second], from: myDate as Date) as NSDateComponents!

        sec = Double(myComponetns.second * -6 )
        min = Double(myComponetns.minute * -6)
        hour = Double((myComponetns.hour-12) * -30)

        sHand.zRotation = DegreeToRadian(Degree: sec)
        mHand.zRotation = DegreeToRadian(Degree: min + (6 * (sec / 360)))
        hHand.zRotation = DegreeToRadian(Degree: hour + (30 * (min / 360)))
    }
}
コード

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

同じタグがついた質問を見る

  • Swift

    8730questions

    Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

  • Xcode

    4912questions

    Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

  • iOS

    4679questions

    iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。