2011-03-14 6 views
1

Ce code fonctionnait correctement dans les versions antérieures d'iOS, mais maintenant dans iOS 4.3, il ne fonctionne plus. Quelqu'un at-il des suggestions sur ce qui doit être corrigé? Dans l'événement FinishedLaunching, j'appelle AddSyncGesture et chaque fois que le périphérique est pivoté, j'ai un notificateur qui appelle la méthode ainsi que des changements verticaux avec le changement d'orientation, je dois donc le retirer et le rajouter.UISwipeGestureRecognizer ne fonctionne pas dans iOS 4.3

 UISwipeGestureRecognizer sgr = null; 

    public void AddSyncGesture() 
    { 
     try { 
      if (sgr != null) 
       window.RemoveGestureRecognizer(sgr); 
      else 
       sgr = new UISwipeGestureRecognizer(); 
     } catch (Exception ex) { 
      Logger.LogException(ex.Message, ex, "AddSyncGesture"); 
     } 
     try { 
      sgr.NumberOfTouchesRequired = 2; 
      if (UIDevice.CurrentDevice.Orientation == UIDeviceOrientation.LandscapeRight || UIDevice.CurrentDevice.Orientation == UIDeviceOrientation.LandscapeLeft) 
       sgr.Direction = UISwipeGestureRecognizerDirection.Left | UISwipeGestureRecognizerDirection.Right; 
      else 
       sgr.Direction = UISwipeGestureRecognizerDirection.Up | UISwipeGestureRecognizerDirection.Down; 
      sgr.Delegate = new SwipeRecognizerDelegate(); 
      sgr.AddTarget(this, SwipeSelector); 
      window.AddGestureRecognizer(sgr); 
     } catch (Exception ex) { 
      Logger.LogException(ex.Message, ex, "AddSyncGesture"); 
     } 
    } 

    Selector SwipeSelector 
    { 
     get { return new Selector("HandleSwipe"); } 
    } 

    [Export("HandleSwipe")] 
    public void HandleSwipe(UISwipeGestureRecognizer recognizer) 
    { 
     if (Utils.CanSync) 
      Application.Synchronizer.Synchronize(true,Application.ProgressView);  
    } 

    class SwipeRecognizerDelegate : MonoTouch.UIKit.UIGestureRecognizerDelegate 
    { 
     public override bool ShouldReceiveTouch (UIGestureRecognizer recognizer, UITouch touch) 
     { 
      return true; 
     } 
    } 

Répondre

0

C'est ce que j'utilise. Pas sûr que c'est la seule façon possible, mais fonctionne sans problèmes:

protected void InitRecognizers() 
    { 
     var _swiperRight = new UISwipeGestureRecognizer(); 
     _swiperRight.Direction = UISwipeGestureRecognizerDirection.Right; 
     _swiperRight.AddTarget(this, new MonoTouch.ObjCRuntime.Selector("SwipeNext")); 
     this.View.AddGestureRecognizer(_swiperRight); 
    } 

    [Export("SwipeNext")] 
    public virtual void Swipe(UIGestureRecognizer rec) 
    { 
     //your code here 
    } 
+0

Cela fonctionnera-t-il encore si vous définissez le nombre de touches nécessaires à 2? – Neal

+0

Oui, cela fonctionne encore sans problèmes. Je l'ai essayé sur mon vrai appareil avec la version 4.3. – Scarlaxx

+0

Merci, je vais continuer à chercher. En fait, j'ajoute mon GR à la fenêtre dans l'événement FinishedLaunching afin qu'il soit disponible dans l'application. A travaillé en pré-4.3. – Neal

Questions connexes