web-dev-qa-db-ja.com

自動レイアウトを備えたiOSの垂直UISlider

IPadアプリの要件に従って、UISliderを垂直に表示します。
私はiOS7コンパイラを使用しており、展開ターゲットはiOS6です。
ストーリーボードで、幅600ピクセルの水平UISliderを追加しました。私はビューコントローラーでIBOutletを作成しました。自動レイアウト制約を設定していません。以下のコードを使用して、回転させて垂直にします。

self.slider.transform = CGAffineTransformMakeRotation(M_PI_2);

回転の前後で、正しいスライダーのフレームサイズを印刷しています。しかし、スライダーは適切に見えません。真ん中のつまみだけを表示しています。 UISliderを回転するにはどうすればよいですか?


enter image description here

17
Satyam

私はそれをこのように機能させることができました:

viewDidLoad: 追加した

[self.slider removeConstraints:self.slider.constraints];
[self.slider setTranslatesAutoresizingMaskIntoConstraints:YES];

スライダーを回転させる前に呼び出されるように

self.slider.transform=CGAffineTransformRotate(self.slider.transform,270.0/180*M_PI);

削除してスーパービューに再度追加する必要はありません。

10
Kolineal

IOS 8とXcode 6で動作する垂直スライダーがあり、ストーリーボードに3つの制約と1行のコードしかありません。インターフェースのスクリーンキャプチャは次のとおりです。

enter image description here

垂直スライダーとその隣のUIImageViewの間には3つの制約があります。

  1. vSlider.Center Y =イメージビュー。中心Y
  2. vSlider.Width = Image View.Height
  3. vSlider.Center X =イメージビュー。トレーリング+ 16

そしてもちろん、1行のコードは次のとおりです。

self.vSlider.transform = CGAffineTransformMakeRotation(-M_PI_2);

Xcode 6のストーリーボードでこれらの制約を設定するのは簡単ですが、iOS 7または6をサポートするコードでこれらの制約を記述するのは簡単だと思います。

12
bugloaf

これは古いトピックですが、Swiftソリューションは、ストーリーボードに自動レイアウト制約があり、他には何もありません。

1/IBOutletに回転を追加する必要があります:

@IBOutlet weak var mySlider: UISlider! {
    didSet {
        mySlider.transform = CGAffineTransform(rotationAngle: -CGFloat.pi/2)
    } // didSet
} // IBOutlet

2 /スライダーがその中心を中心に回転することを念頭に置いて、ストーリーボードで制約を定義します。

たとえば、mySliderをmyViewの左側に配置する場合、3つの制約が必要です。

  1. myView.Leading = mySlider.CenterX-20
  2. mySlider.width = myView.Height(たとえば0.8の乗数)
  3. mySlider.CenterY = myView.CenterY

mySliderはもちろんストーリーボードでは水平に表示されますが、サイズは正しく、中心は正しく配置されます。

5
KerCodex

ViewControllerのAuto-Layoutのチェックを外します。SDK7.0で垂直方向に動作させるための他のオプションはありません:(

2
Ticko

UISliderを垂直に配置することに関しては、非常に多くの解決策があります。これは、autoLayoutが有効になっている(デフォルトではストーリーボード内)XCode5のiOS7の私の概要です。

  1. viewDidLoadにメソッドを追加self.slider.transform = CGAffineTransformMakeRotation(M_PI_2);

  2. スライダーに関するautoLayout制約を定義明示的にストーリーボードで好きなように

1
dopcn

私にとっては、2ステップのプロセスが最も効果的でした(以前のソリューションのいくつかを組み込んでいます)

Autolayoutステップ)IBに垂直ビューを追加し、autolayoutを使用してそれを隣接するビューにリンクしました。次に、ビューにスライダーを追加して、ビューの中央に接続しました。次に、スライダーの幅をビューの高さに接続しました。最後に、スライダーアウトレットを(スライダーとして)私のViewControllerコードにドラッグしました

コードステップ)次に、単にviewWillAppear(Swift-code)にを追加します。
let trans = CGAffineTransformMakeRotation(CGFloat(M_PI_2)); slider.transform = trans;

0
Philip De Vries

これを試して :-

self.slider.transform = CGAffineTransformRotate(slideToUnlock.transform、-90.0/180 * M_PI);

0
Abhishek Gupta

ISliderを垂直位置で回転させるには、以下のコードを試してください。

//To rotate the slider in Vertical Position
CGAffineTransform sliderRotation = CGAffineTransformIdentity;
sliderRotation = CGAffineTransformRotate(sliderRotation, -(M_PI / 2));
sliderBrightness.transform=sliderRotation;
0
Hardik Thakkar

あなたのviewDidLoadで、試してください:

UIView *superView = self.sizeSlider.superview;
[self.sizeSlider removeFromSuperview];
[self.sizeSlider removeConstraints:self.view.constraints];
self.sizeSlider.translatesAutoresizingMaskIntoConstraints = YES;
self.sizeSlider.transform = CGAffineTransformMakeRotation(M_PI_2);
[superView addSubview:self.sizeSlider];

制約では機能しないので、コツはuisliderの制約を削除することです。フレームプロパティを設定して、手動でサイズを変更する必要がある場合があります。

0
Antzi

ストーリーボードを使用してUISliderを構築することはできません。コーディングしてUISliderを構築します。

slider = [[UISlider alloc] initWithFrame:CGRectMake(640, 150, 600, 400)];
[slider.layer setAnchorPoint:CGPointMake(0.0f, 0.0f)];
slider.transform = CGAffineTransformMakeRotation(M_PI/2);
[self.view addSubview:slider];