2016-06-12 8 views
0

スライダを使用してUIImageViewを移動するにはいくつかの問題があります。この私が現在使用している私のコードです:iOSスウィフト - スライダで画像を移動する

@IBOutlet weak var titanic: UIImageView! 

... 

let screenWidth = UIScreen.mainScreen().bounds.width 
let titanicWidth = titanic.bounds.size.width 
let viewcenter = titanicWidth/2 
let slidervalue = CGFloat(sender.value) 
let value = (screenWidth * slidervalue * (1.0 - titanicWidth/screenWidth)) + viewcenter 
titanic.center.x = CGFloat(value) 
print(value) 

実は、私はこのコードで画像を移動することができますが、:何とかイメージは常にずに、バックスクリーンの真ん中で、それの原点位置に「ジャンプ」スライダーをまったく動かす...これはどうやって起こるのですか?私はすでにこの効果を引き起こすかもしれないいくつかの奇妙な属性の検査官をチェックしましたが、運はありません。

+0

imageViewに制約を使用しましたか? –

+0

いいえ、画像全体を削除して新しく追加しました...全く効果がありません –

+0

いつ戻るのですか?スライダーを放した直後か、スライダーの位置を変えたら? –

答えて

0

あなたのペン先/ストーリーボードの "AutoLayoutを使用する"チェックボックスをオフにしない限り、AutoLayoutを使用しています。システムは、ビューに制約を加えます。

AutoLayoutを使用すると、ビューのフレーム/境界/中心を直接変更することはできません。次に何かがレイアウトの更新をトリガすると、そのビューはその制約によって定義された位置にスナップバックします。

ノブ/ストーリーボード全体のAutoLayoutをオフにするか、アウトレットをコンストレインに追加し、コンストレイントの定数値を変更する必要があります。その後、ビューのlayoutIfNeeded()を呼び出して制約の変更を有効にします。

コンセントにコンセントを追加することをおすすめします。古いスタイルのStruts-and-Springsスタイルのフォームデザインに切り替えることは大きな変更です。これは、View Controllerに大きな副作用をもたらすものです。 (個人的にはストラットとスプリングスタイルのフォームデザインを好みますが、これは新しい方法であるため、AutoLayoutを使用するように強制しています)

+0

第3のオプションは、ストーリーボードにレイアウトするのではなく、コード内に 'UIImageView'を作成することです。 * Auto Layout *はそれに触れることはありませんし、フレームでそれを動かすことができます。 – vacawama

+0

自動レイアウトによって問題が発生しました。 Thxメイト! –

+0

あなたはどのような解決策を使いましたか? –

関連する問題