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

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

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

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

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
            }
        }
    }