1

UISliderが狭くなるという理由だけで、iPhoneアプリ用のカスタム垂直スライダーを作成する必要があります。それは私のラジコンヘリコプターのスロットル「スティック」として使用される予定です。xcodeでスライダーを回転させることができました

throttleSlider.transform = CGAffineTransformMakeRotation(3*M_PI_2);

でも、ストーリーボードにスライダーがまだ水平に表示されているので、これはかなり醜いと思います。また、とにかくスライダーを広くする方法が見つかりません。

この問題にどのようにアプローチしますか?

ありがとうございました。

4

3 に答える 3

3

現在開発中のアプリケーションでは、カスタムスライダーが必要でした。幅を広くする必要がありました(幅44ピクセル、テーブルビューセルのデフォルトサイズ)。伸縮可能な画像を使用し、スライダーのプロパティを調整することで、目標を達成しました。

UIImage* sliderCenterImage = [UIImage imageNamed:@"sliderCenter.png"];
[slider setThumbImage:sliderCenterImage forState:UIControlStateNormal];
UIImage *leftStretch2 = [[UIImage imageNamed:@"sliderLeft.png"]
                             stretchableImageWithLeftCapWidth:5.0 topCapHeight:0.0];
slider setMinimumTrackImage:leftStretch2 forState:UIControlStateNormal];
UIImage *rightStretch = [[UIImage imageNamed:@"sliderRight.png"]
                          stretchableImageWithLeftCapWidth:1.0 topCapHeight:0.0];
[slider setMaximumTrackImage:rightStretch2 forState:UIControlStateNormal];

このようにして、tableViewのセル全体を満たすスライダーを取得しました。thumbImageはスライダーの中央を表す画像(操作する画像、デフォルトでは丸いドット)、minimumTrackImageはスライダーの左側の部分(デフォルトでは青色)、maximumTrackImageはスライダーの中央の右側にある部分は通常空白のままです。UISliderには、さらにカスタマイズできるプロパティが他にもあります。UISlider開発者リファレンスをご覧ください

お役に立てれば。

于 2012-07-19T09:15:03.890 に答える
3

UICustomSwitchCatamount Softwareのブログから、以前にこの実装を使用しました。

UICustomSwitch

おなじみのクラスをカスタマイズしようとしUISwitchますが、サブクラス化UISliderし、通常のスイッチイメージをカスタムイメージに置き換えることでこれを実現します。このコードをダウンロードして、含まれている画像を自分で描いたものに置き換えることができます。

これはオンとオフの設定のみを持つスイッチであることが意図されていたため、これでタッチに応答することがわかります。

[self setOn:on animated:YES];

setOn:animated:スライダーがその値を0.0または1.0に強制しないように、呼び出すコードを削除するだけです。

于 2012-07-19T08:35:10.587 に答える
0

更新された回答として、stretchableImageWithLeftCapWidthは非推奨になりました。使用することをお勧めします

resizableImageWithCapInsets

迅速なカスタムスライダーの場合:

    var thumb = UIImage(named: "slider_thumb")
    musicSlider.setThumbImage(thumb, forState: UIControlState.Normal)

    var left = UIImage(named: "left_slide")?.resizableImageWithCapInsets(UIEdgeInsets(top: 0.0,left: 0.0,bottom: 0.0,right: 0.0))
    musicSlider.setMinimumTrackImage(left, forState: UIControlState.Normal)
    var right = UIImage(named: "right_slide")?.resizableImageWithCapInsets(UIEdgeInsets(top: 0.0,left: 0.0,bottom: 0.0,right: 0.0))
    musicSlider.setMaximumTrackImage(right, forState: UIControlState.Normal)

UIEdgeInsertsは、サイズ変更されない画像のバッファーを指定します。したがって、left:15.0は、左から15ピクセルの領域のサイズが変更されないことを意味します。私の場合は気にしなかったので、すべてゼロでした。

注意として、画像自体がスライダーバーを広くしているのです。親指の画像の高さは35ピクセル、左右のスライダーの画像の高さは20ピクセルです。すべてがImages.xcassets(画像を保持する必要がある場所)からスライスしてサイズ変更可能です

于 2015-02-24T05:51:21.097 に答える