2016-09-04 22 views
-1

私は正しいカードが選択されるたびに、新しいボタン/カードが画面上に表示される純粋な推測カードゲームを作っています。私はaddButton関数を作ったが、私はそれに入れなければならないことについて混乱している。誰でも関数を呼び出すたびに新しいボタンを作成する方法について、正しい方向に向かって私を導いてください。関数が呼び出されるたびに新しいボタンを自動的に追加する方法は?

let card1 = UIButton(type: UIButtonType.Custom) as UIButton 
let card2 = UIButton(type: UIButtonType.Custom) as UIButton 
var random = arc4random_uniform(101) 
override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

    card1.backgroundColor = UIColor.cyanColor() 
    card1.frame = CGRectMake(100, 100, 100, 100) 
    card1.addTarget(self, action: "Card1Btn:", forControlEvents: UIControlEvents.TouchUpInside) 
    self.view.addSubview(card1) 

    card2.backgroundColor = UIColor.cyanColor() 
    card2.frame = CGRectMake(500, 100, 100, 100) 
    card2.addTarget(self, action: "Card2Btn:", forControlEvents: UIControlEvents.TouchUpInside) 
    self.view.addSubview(card2) 

} 

func Card1Btn(sender: UIButton!){ 
    if random <= 50{ 
     print("you won") 

    }else{ 
     print ("you Lost") 

    } 

} 

func Card2Btn(sender: UIButton!){ 
    if random >= 51{ 
     print("you won") 
    }else{ 
     print("you lost") 
    } 

} 

func addButton(){ 

} 

答えて

1

既にボタンをviewDidLoadに追加するコードがありますので、再利用できるようにしてください。我々は我々が作成する新しいカードを追跡することができるようにボタンを追加するコードは、再利用可能となりますので、まず我々は、また

...、変数あなたcard1card2参照を作るために

var card1 = nil as UIButton? 
var card2 = nil as UIButton? 
が必要になります、我々は自分自身を繰り返したい、それでは、カード1とカード2のフレームのためのいくつかの定数を追加してみましょう...

let card1Frame = CGRectMake(100, 100, 100, 100) 
let card2Frame = CGRectMake(500, 100, 100, 100) 

そして、我々は(以前にviewDidLoadで繰り返される)を追加し、ボタンのコードを置くことができませんそれ自身の機能に...

func addButtonWithFrame(frame: CGRect) -> UIButton 
{ 
    let card = UIButton(type: UIButtonType.Custom) as UIButton 
    card.backgroundColor = UIColor.cyanColor() 
    card.frame = frame 
    card.addTarget(self, action: #selector(MyVC.cardButtonPressed(_:)), forControlEvents: UIControlEvents.TouchUpInside) 
    self.view.addSubview(card) 
    return card 
} 

今、私たちは

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
    card1 = self.addButtonWithFrame(card1Frame) 
    card2 = self.addButtonWithFrame(card2Frame) 
} 

...さんは viewDidLoadでそれを使用させ、ボタンを作成し、追加するための汎用的な方法を持っているそして今、我々は、ボタンが押されたことと同じコードを再利用することができます...

func cardButtonPressed(sender: UIButton!){ 
    // Decide on win or lose based on current value of 'random' 
    if random <= 50{ 
     print("you won") 
    }else{ 
     print("you Lost") 
    } 
    // Set a new value for 'random' ready for next time 
    random = arc4random_uniform(101) 
    // Remove old card 
    sender.removeFromSuperview() 
    // Generate new replacement card 
    let newFrame = sender.frame 
    let newCard = self.addButtonWithFrame(newFrame) 
    // Keep reference to new card 
    if (sender == card1){ 
     card1 = newCard 
    }else{ 
     card2 = newCard 
    } 
} 
+0

カードを交換したい場合はこれがいいですが、カードを追加したいのですが。だから初めに2枚のカードがあり、ユーザーがそれに正しく答えると3枚のカードがあるとします。 – user6794148

+0

変更は簡単です。私の答えは、あなたがすでにプログラムでカードを追加していた方法を示しています。コードを再利用できるようにするにはちょっとした再構成が必要でした。たくさんのカードを追加したい場合は、配列内でそれらを追跡することができます(または、それらがビューの唯一のサブビューである場合、 'view.subviews'はそれらをあなたのために追跡します)。主なテイクアウェイは、カード押さえを扱う汎用関数を使用し、カード自体(「送信者」)に基づいて(必要であれば)異なる動作をする必要があるということです。 'card.tag'プロパティは、それぞれに一意のIDを付ける場合に使用できます。 – jhabbott

関連する問題