2016-03-21 18 views
0

誰かが触れたときに指定した起点にビューをアニメートし、再度触れるたびに元の位置に戻ってきます。ストーリーボードでAutoLayoutを使って自分の意見を整えています。 まず、完全な位置で上に行くが、完全に元の位置に戻らない。 私は、視点原点の値をviewDidLoadメソッドのCGFloat変数に格納し、そのオブジェクトを割り当ててビューを戻します。ここ は下向きのため原点を持つアニメーションUIViewが完全には機能していません

[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:0.2]; 
CGRect frame = _pickLocationView.frame; 
frame.origin.y = _cityLabelView.frame.origin.y; 
_pickLocationView.frame = frame; 
[UIView commitAnimations]; 

アニメーション(これは完璧に動作している)上向きのための私のコード アニメーションです。 (この方法には問題があります)

[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:0.2]; 
CGRect frame = _pickLocationView.frame; 
frame.origin.y = kDefaultOriginOfPickLocationView; 
_pickLocationView.frame = frame; 
[UIView commitAnimations]; 
+0

どのようにアニメーションを下向きに呼びますか? –

+0

そのビューのデフォルトの起点を割り当てることによって –

答えて

0

提案: アニメーションが開始する前に、メソッド[self setNeedsLayout]を使用してください。

+0

私は[self setNeedsLayout]メソッドを呼び出すか、またはオーバーライドしてから呼び出すべきですか? 申し訳ありません、それはばかげた質問ですが、iOSプログラミングの新機能です。 –

+0

[UIView commitAnimation]の前に使用してください。私の答えに上記のピースコードを書いてください。変更があるかどうか確認してください。そうでない場合は、commitAnimationの後にメソッドを使用してみてください。 –

0

フレームの最終寸法と位置は、viewDidLoadであるとは限りません。代わりにviewDidLayoutSubviewsを使用して元の値を設定してください。 viewDidLayoutSubviewsは、ビューの境界が変更された場合に複数回呼び出すことができます。

最初のアニメーションを開始する直前に元の値を保存することもできます。

関連する問題