2015-08-28 110 views
1

我的重置按钮需要2次点击重置小狗的位置而不是1.我想知道我错在哪里。另外,当我在重置后再次点击tapButton时,小狗会回到重置之前的位置。任何想法为什么会发生?在Swift中,动作需要2次点击而不是1次

我很新,所以我可能会把一些东西放在错误的地方。

var tapsCount = 0 
var countdownNumber = 10 
var Timer : NSTimer = NSTimer() 


class ViewController: UIViewController, ADBannerViewDelegate { 

@IBOutlet weak var puppy: UIImageView! 
@IBOutlet weak var secondsLeft: UILabel! 
@IBOutlet weak var tapsCounter: UILabel! 
@IBOutlet weak var currentHighScore: UILabel! 
@IBOutlet weak var colon: UILabel! 
@IBOutlet weak var Banner: ADBannerView! 

@IBOutlet weak var endMessage: UILabel! 
@IBAction func tapButton() { 
    if tapsCount == 0 { 
     Timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("UpdateTimer"), userInfo: nil, repeats: true) 
    } else { 

    } 
    tapsCount = tapsCount+1 
    tapsCounter.text = "\(tapsCount)" 

    if countdownNumber<0 { 
     secondsLeft.text = "" 
     tapsCounter.text = "" 
    } else { 


    //-------moving the puppy---------------------- 


     UIView.animateWithDuration(0, delay: 100, options: UIViewAnimationOptions.CurveLinear, animations: { 
      self.puppy.alpha = 1 
      self.puppy.center.y = self.puppy.center.y + 1 //this will change Y position of your imageView center every time you press button 
      }, completion: nil) 

     if self.puppy.center.y >= 131 { 
      puppy.center.y = 131 
     } 
     if self.puppy.center.y <= -41 { 
      puppy.center.y = -41 
     } 
    } 
     } 

@IBAction func resetButton() { 
    tapsCount = 0 
    countdownNumber = 10 
    colon.text = ":" 
    Timer.valid 
    secondsLeft.text = "10" 
    tapsCounter.text = "0" 
    endMessage.text = "" 
    Timer.invalidate() 

    puppy.frame = CGRectMake(187, 325, puppy.frame.size.width, puppy.frame.size.height); 


} 


func UpdateTimer() { 
    secondsLeft.text = String(countdownNumber--) 
    if countdownNumber == (-1) { 
     secondsLeft.text = "" 
     colon.text = "" 
     var finalScore = tapsCount 
     var highest = currentHighScore.text 
     tapsCounter.text = "" 


    } else if countdownNumber<(0) { 
     Timer.invalidate() 
     secondsLeft.text = "" 
     tapsCounter.text = "" 
    } else { 
    } 
} 


override func viewDidLoad() { 

    Banner.hidden = true 
    Banner.delegate = self 
    self.canDisplayBannerAds = true 

    secondsLeft.text = String(countdownNumber) 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 




} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

func bannerViewActionShouldBegin(banner: ADBannerView!, willLeaveApplication willLeave: Bool) -> Bool { 
    return true 
} 

func bannerViewDidLoadAd(banner: ADBannerView!) { 
    Banner.hidden = false 
} 

} 

包含复位按钮的代码的主要部分是在这里:

class ViewController: UIViewController, ADBannerViewDelegate { 

@IBAction func resetButton() { 
    tapsCount = 0 
    countdownNumber = 10 
    colon.text = ":" 
    Timer.valid 
    secondsLeft.text = "10" 
    tapsCounter.text = "0" 
    endMessage.text = "" 
    Timer.invalidate() 

    puppy.frame = CGRectMake(187, 325, puppy.frame.size.width, puppy.frame.size.height); 


    } 
} 
+0

那'延迟:100'可能是有问题的.. – jtbandes

+0

你为按钮设置了哪个事件? – iRiziya

回答

1

更新puppy.frame这样:

dispatch_async(dispatch_get_main_queue()) { 
    self.puppy.frame = CGRectMake(187, 325, self.puppy.frame.size.width, self.puppy.frame.size.height); 
} 
+0

但在主线程上发送按钮事件... – jtbandes

+0

这对我而言并不适用。仍然是同样的结果。 – adman

+0

检查此示例项目:http://s000.tinyupload.com/?file_id=97544243435684077587 @adman –