

野球のアプリを作っている初心者です。

下記コードで、  
①タップした場所にボールを移動  
②Segmented controlで  
ゴロ  
ライナー  
フライ  
から一種類を選択すると、画面の中心（ホームベース）からボールまで、  
直線  
緩い曲線  
大きい曲線  
を描画したいのですが、

下記コードでは、ビルドできてもSegmentedcontrolを選択すると、クラッシュしてしまいます。  
思い当たることはやってみたのですが、解決する方法が見つかりません。

解る方、ご指導ください。  
以前、似たような質問をしたことがありますが、明確な回答がいただけなかったので、問題の部分だけを抜き出してみました。  
よろしくお願いします。

[code]

    import SpriteKit
        class GameScene: SKScene {
            var myImage : SKSpriteNode!
            override func didMoveToView(view: SKView) {
                //背景画像。SKSPriteNodeで画像を読み込む。
                let backGround = SKSpriteNode(imageNamed:"背景.png")
                //画面サイズを取得
                let Label = SKLabelNode(text: "\(self.size)")
                Label.position = CGPointMake(self.size.width/2.0,self.size.height/2.0)
                //背景を画面の中央に配置する
                backGround.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame))
                //画像のサイズを画面に合わせる
                backGround.size = self.size
                //画像を最下層に設置
                backGround.zPosition = -CGFloat.infinity
                // シーンに追加.
                self.addChild(backGround)
                // GameSceneの背景色を青色にする.
                self.backgroundColor = UIColor.blueColor()
                // ボール画像を生成.
                myImage = SKSpriteNode(imageNamed:"　ボール.png")
                // ボール画像の描画場所を指定.
                myImage.position = CGPoint(x:CGRectGetMidX(self.frame), y:CGRectGetMidY(self.frame));
                // シーンに追加.
                self.addChild(myImage)
    
                // ラベル　打球種
                let dakyuushu = SKLabelNode(fontNamed:"Chalkduster")
                dakyuushu.text = "打球種"
                dakyuushu.fontSize = 15
                dakyuushu.position = CGPoint(x:(size.width / 10.0) * 1 , y:(size.height / 35) * 11.1)
                dakyuushu.fontColor = UIColor.whiteColor()
                self.addChild(dakyuushu)
                //選択肢
                let myArray1: NSArray = ["  ゴロ  ", "  ライナー  ", "  フライ  " ]
                // SegmentedControlを作成する.
                let dakyuushu1: UISegmentedControl = UISegmentedControl(items: myArray1 as [AnyObject])
                dakyuushu1.center = CGPoint(x:(size.width / 10.0) * 5.8 , y:(size.height / 35) * 23.5)
                dakyuushu1.tintColor = UIColor.yellowColor()
                // イベントを追加する.
                dakyuushu1.addTarget(self, action: "segconChanged1:", forControlEvents: UIControlEvents.ValueChanged)
                // Viewに追加する.
                self.view!.addSubview(dakyuushu1)
            }
    
            override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
                for touch: AnyObject in touches {
                    // タッチされた場所の座標を取得.
                    let location = touch.locationInNode(self)
                    //画面の中心
                    let midX = CGRectGetMidX(self.frame)
                    let midY = CGRectGetMidY(self.frame)
                    // ボール位置・軌跡のエリア条件
                    let area2 = (location.x - midX) / (location.y - (midY - (midY / 5.0)))
                    if location.y > midY - (midY / 5.0) {
                        if area2 >= -1  && area2 <= 1 {
                            //　打球到達エリア判定
                            let area1 = ((location.x - midX) / (location.y - midY))
                            if location.y - midY <= 0 && location.x - midX <= 0 {
                                print("left")
                            } else if location.y - midY < 0 && location.x - midX > 0 {
                                print("right")
                            } else if area1 < -0.3 {
                                print("left")
                            } else if area1 >= -0.3 && area1 <= 0.3 {
                                print("center")
                            } else if area1 > 0.3 {
                                print("right")
                            }
                            // タッチされた場所に画像を移動
                            myImage.position = location
                        }
                    }
                }
                //打球種　SegmentedControlの値が変わったときに呼び出される.
                func segconChanged1(segcon: UISegmentedControl){
                    //画面の中心
                    let midX = CGRectGetMidX(self.frame)
                    let midY = CGRectGetMidY(self.frame)
                    // 始点を記憶するインスタンス変数
                    var position = CGPointZero
                    // 始点を記憶
                    position = self.convertPointFromView((touches.first?.locationInView(view))!)
                    // CGPathを生成
                    let path = CGPathCreateMutable()
                    CGPathMoveToPoint(path, nil, position.x, position.y)
                    // shapeNodeを取得
                    guard let shapeNode = childNodeWithName("curve") as? SKShapeNode else {
                        return
                    }
                    switch segcon.selectedSegmentIndex {
                    case 0:
                        CGPathAddCurveToPoint(path, nil, position.x , position.y , midX, midY, midX, midY)
                    case 1:
                        CGPathAddCurveToPoint(path, nil, (position.x + midX) / 2.0 , position.y , midX, midY, midX, midY)
                    case 2:
                        CGPathAddCurveToPoint(path, nil, (position.x + midX) / 2.0 , (position.y + (midY / 1.5)), midX, midY, midX, midY)
                    default:
                        print("Error")
                    }
                    // 線の太さを指定
                    shapeNode.lineWidth = 1.0
                }
            }
        }
    
[/code]


CC BY-SA 3.0
2016-02-07T12:29:14.110
21814
2016-02-10T09:54:33.957
2016-02-10T09:54:33.957
7459
13156
question
ios swift xcode
SKSceneでUISegmentedControlを使用して、描画する線の種類を変更できるようにしたいです。