2011-03-14 9 views
1

このコードは従来のiOSバージョンで正常に機能しましたが、現在はiOS 4.3では機能しなくなりました。誰に何を修正する必要があるかについて何か提案がありますか?iOS 4.3でUISwipeGestureRecognizerが動作しない

FinishedLaunchingイベントで私はAddSyncGestureを呼び出すと、デバイスが回転するたびに方向を変更して垂直方向の変更を呼び出すノーティファイヤがあるため、削除して再追加する必要があります。

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

答えて

0

これは私が使用するものです。これは唯一の方法だとは分かりませんが、問題なく動作します:

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

必要なタッチ数を2に設定しても機能しますか? – Neal

+0

はい、問題なく動作します。実際のデバイスでバージョン4.3で試しました。 – Scarlaxx

+0

ありがとう、私はそれを調べ続けます。私は実際にFinishedLaunchingイベントのウィンドウに自分のGRを追加するので、アプリ全体で利用可能です。 4.3より前に働いた。 – Neal

関連する問題