SIN@SAPPOROWORKSの覚書

C#を中心に、夜な夜な試行錯誤したコードの記録です。

Xamarin.iOS スライダー・プログレスビュー

【 Xamarin 記事一覧 】

1 スライダー UISlider

f:id:furuya02:20140613045156p:plain:w320:left
ストーリーボードでツールボックスからSliderを置きます。




f:id:furuya02:20140613045248p:plain:w360:left
Sliderコントロールを選択し、プロパティ「Identity」-「Name」で、名前を付けます。
ここまでの操作で、ViewControllerの制御クラスであるSingleView1ViewControllerで、この名前のインスタンスとして利用可能です。

また、ValueのMininum及びMaxmumで最小値及び最大値を指定できます。



f:id:furuya02:20140613045249p:plain:w150:left
スライダーの値が変化した際のイベントは、ValueChangedで取得可能です。
サンプルでは、ラベルを使用して、スライダーの値をリアルタイムに表示しています。

public override void ViewDidLoad(){
    base.ViewDidLoad();

    slider1.ValueChanged += (sender, args) => {
       label1.Text = slider1.Value.ToString();
    };
}



f:id:furuya02:20140613045250p:plain:w150:left
スライダーの値は、floatなので、小数単位で変化しますが、これを一定間隔で変化させるためには、同イベントで値を丸める必要があります。
サンプルでは、intにキャストすることで、整数で値が変化するようにしてみました。

public override void ViewDidLoad(){
    base.ViewDidLoad();

    slider1.ValueChanged += (sender, args) =>{
        slider1.Value = (int)slider1.Value; //取得値をintでキャストして、改めて設定する
        label1.Text = slider1.Value.ToString();
    };
}


2 プログレスビュー UIProgressView

f:id:furuya02:20140613045533p:plain:w320:left
ストーリーボードでツールボックスからProgress Viewを置きます。



f:id:furuya02:20140613045534p:plain:w360:left
Progress View を選択し、プロパティ「Identity」-「Name」で、名前を付けます。
ここまでの操作で、ViewControllerの制御クラスであるSingleView1ViewControllerで、この名前のインスタンスとして利用可能です。



f:id:furuya02:20140613045535p:plain:w150:left
サンプルでは、ボタンを押すと、プログラスビューの値を0から1まで0.01単位で変化させています。
また、プログレスビューの縦幅(高さ)は、プロパティ Transform (CGAffineTransform)で変更できます。

public override void ViewDidLoad(){
    base.ViewDidLoad();

    //プログレスビューの縦幅(高さ)を変更する
    CGAffineTransform transform = CGAffineTransform.MakeIdentity();
    transform.Scale(1f, 10f); //高さを10倍にする
    progressView1.Transform = transform;

    //Restartボタンを押した時のイベント
    button1.TouchUpInside += async (sender, e) => {
        //0から1まで0.01づつ増加させる
        for (var n = 0f; n <= 1f; n += 0.01f){
            progressView1.Progress = n;// プログレスビューの値設定
            label1.Text = n.ToString(); //ラベル表示
            await Task.Run(() => Thread.Sleep(100)); //0.1秒の遅延
        }
    };
}

【 Xamarin 記事一覧 】