2016-11-15 4 views
2

xamarinの問題を解決するにはいくつかの問題があります。私のviewcontrollerのViewDidAppearでは、私はタップジェスチャーを登録しています。UITapGestureRecognizer xamarin - 複数回タップすると複数のビューがすぐに表示されます

ProfileViewController

public override void ViewDidAppear (bool animated) 
     { 
      base.ViewDidAppear (animated); 
      if (!_hasUi) { 
       SetUi(); 
      } 

      SetProfile(); 

      if (CheckConnectivityStatus()) { 

       SetGameData(); 

       if (_hasRegisteredGestures) return; 
       //SetGestures(); 
       AssignGesturesToUi(); 


       _hasRegisteredGestures = true; 
      } else { 
       HandleWebAPICallError(); 
      } 
     } 


public void AssignGesturesToUi() 
     { 

      _bonusTap = new UITapGestureRecognizer(ShowBonus) { CancelsTouchesInView = false }; 

      _userProfile.VwLevel.MultipleTouchEnabled = false; 
      _userProfile.VwLevel.UserInteractionEnabled = true; 
      _userProfile.VwLevel.AddGestureRecognizer(_bonusTap); 

     } 

私は、パラメータとしてタップを取る私のShowBonusメソッドを持っています。

private void ShowBonus (UITapGestureRecognizer tap) 
     { 
      if (tap.State == UIGestureRecognizerState.Cancelled) 
       return; 

      _userProfile.VwLevel.UserInteractionEnabled = true; 

      //RemoveGestures(); 
       var tab = TabBarController as GameTabController; 
       tab?.SetTabBarVisible(false, true); 
       var mainStoryboard = UIStoryboard.FromName("Main", null); 
       var achievementsViewController = (AchievementsViewController)mainStoryboard.InstantiateViewController("AchievementsViewController"); 
       AddChildViewController(achievementsViewController); 
       achievementsViewController.Achievements = false; 
       achievementsViewController.View.Transform = CGAffineTransform.MakeScale(0.01f, 0.01f); 
       achievementsViewController.View.Center = _userProfile.ConvertPointToView(_userProfile.Cup.Center, View); 
       achievementsViewController.ReturnPoint = achievementsViewController.View.Center; 
       View.AddSubview(achievementsViewController.View); 
       achievementsViewController.View.Alpha = 0.0f; 
       UIView.Animate(0.5f, 0.0f, UIViewAnimationOptions.CurveEaseInOut, 
        () => { 
         achievementsViewController.View.Transform = CGAffineTransform.MakeScale(1.0f, 1.0f); 
         achievementsViewController.View.Center = View.Center; 
         achievementsViewController.View.Alpha = 1.0f; 
        }, 
        () => { 
         achievementsViewController.DidMoveToParentViewController(this); 

        }); 

     } 

ボーナスを表示すると、プロファイルビューの別のビューが表示されます。 UIをすばやくタップすると、コードが2回発生します。それは、コードを一度しか実行しないということを複数回迅速にタップしたとしても可能ですか?

答えて

0

DateTime型の変数lastShowPressを定義し、ShowBonusが最後に呼び出された時刻をそこに格納します。 ShowBonusの初めに、ShowBonusが10秒以内に呼び出されたかどうかを確認します。それがあったならば、 - 戻っていなければ、時間を保存して実行します。この変数を保護する/ロックオブジェクトでチェックする必要があります。

関連する問題