2012-08-02 2 views
3

J'utilise MonoDevelop et xamarin pour créer une application iOS.iOS, Xamarin, UIView, Draw, l'animation dynamique ne fonctionne pas

J'ai une vue qui ressemble à ceci:

public class MyView: UIView 
{ 
    private Timer _t = new Timer(1000); 
    private int _i = 0; 

    public MyView() 
    { 
     _t.Elapsed += (sender, e) => { 
      _i = (_i + 1) % 100; 
      this.Draw(new Rectangle(0, 0, 110, 110)); 
     }; 
     _t.Enabled = true; 
    } 

    public override void Draw(RectangleF rect) 
    { 
     base.Draw(rect); 
     var uiImage = UIImage.FromFile("myImage"); 
     var uiImageView = new UIIMageView(new Rectangle(_i, 0, 10, 10)); 
     uiImageView.Image = uiImage; 
     AddSubView(uiIMageView); 
    } 
} 

Je pense que mon image se déplace. Mais par conséquent, je n'ai que l'image statique initiale. Quelqu'un peut-il suggérer comment faire une animation comme décrit?

Répondre

1

je suggère de modifier votre code comme ceci:

public MyView() 
    { 

     var uiImage = UIImage.FromFile("myImage"); 
     var uiImageView = new UIIMageView(new Rectangle(0, 0, 10, 10)); 
     uiImageView.Image = uiImage; 
     AddSubView(uiIMageView); 

     _t.Elapsed += (sender, e) => { 
      _i = (_i + 1) % 100; 
      this.Draw(new Rectangle(_i, 0, 110, 110)); 
     }; 
     _t.Enabled = true; 
    } 

    public override void Draw(RectangleF rect) 
    { 
     base.Draw(rect); 
     InvokeOnMainThread(()=>{ 
      uiImageView.Frame = rect; 
     }); 
    } 

Je pense qu'une partie de votre question est que la minuterie gestionnaire fonctionne sur un Elapsed thread séparé que le thread principal de l'interface utilisateur. Aussi, il sera plus efficace de ne pas recréer le UIImageView à chaque fois.

Questions connexes