3

iOS アプリケーションの作成には MonoDevelop と xamarin を使用しています。

次のようなビューがあります。

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

私のイメージが動くことを期待しています。しかし、結果として、最初の静止画像しかありません。説明したようなアニメーションを行う方法を提案できる人はいますか?

4

1 に答える 1

1

次のようにコードを変更することをお勧めします。

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

あなたの問題の一部は、タイマー Elapsed ハンドラーがメインの UI スレッドとは別のスレッドで実行されていることだと思います。また、毎回 UIImageView を再作成しない方が効率的です。

于 2013-05-14T13:09:44.347 に答える