- の1カ月のカレンダービューを表示するためのUIControlサブクラスを作成しました。ほとんどの月は日付を表示するのに5週間必要ですが、 には6ヶ月が必要なので、必要に応じて を動的にサイズ変更するコントロールを作成しました。 UIViewアニメーションを使用して、 のフレームを変更します。
- 問題は、今、画面上の他のコントロールが必要です。 カレンダーのサイズが変更されたときに移動/サイズ変更してください。そして、私は本当に カレンダーコントロールのアニメーションのサイズを変更する必要があります。 理想的には、私はカレンダーの細かい部分を、画面上の他のコントロールについてのコントロール の制御なしにコーディングすることなく、これを行うでしょう。
- ここで最善の戦略は何ですか?私はどうにかして 他のコントロールをカレンダーコントロールのフレームに固定し、 プラットフォームでフレームの変更をアニメートするときに、その位置/サイズを調整することができることを期待していました。 しかし、これまでのところ、私はストラットとバネの組み合わせを見つけることができません それが起こる。
- 私は、弾丸を噛んで、私のカレンダーコントロール内で起こっているアニメーションに という他の画面上のコントロールを追加するだけでいいですか?
答えて
これにはより良い回答があるかどうかを確認することになります。
私が知っていることは、あなたのカレンダービューでオーバーライドsetFrame
であり、それが変更されたら、setNeedsLayout
をそのスーパービューに送ってください。
標準ビューでこれを正しく自動サイズ変更するかどうかはわかりません。一般的に、ジオメトリはビューツリーの下に流れますが、上には流れません。両方向で行う必要があります。
あなたは包含ビューでlayoutSubviewsを実装する必要があるかもしれません。
アニメーションロジックを特定のビューからすべてのコントロールを管理するビューコントローラに移動します。ビューはそれ自身の適切なサイズを把握して、ビューコントローラに依頼します。
[self.calendarView setDate:date];
CGSize calendarSize = [self.calendarView sizeForDate:date];
[UIView animateWithDuration:...
animations:^{
... re-layout everything, including the calendarView ...
}];
別の、同様のアプローチ:例えば
[self.calendarView setDate:date];
[UIView animateWithDuration:...
animations:^{
[self.calendarView sizeToFit];
... re-layout everything else ...
}];
あなたの好みに基づいて、同様のアプローチがたくさんあります。しかし、そのキーは、特定のビューからロジックを移動することです。通常は、ビューコントローラが最適なソリューションです。コントロールが単一のUIView
に入る論理的なコレクションを作成する場合、その "コレクション" UIView
はlayoutSubviews
で同じものを管理することができますが、ここではビューコントローラーを使用する方が良い方法です。
ありがとうございました。私はこれらのアプローチを両方とも成功させてみました。 setFrameのオーバーライドとlayoutSubviewsの実装は機能しましたが、他のコントロールは、カレンダーコントロールの成長に伴い、それらの場所にアニメートするのではなく、新しい場所にジャンプしました。
アニメーション中に他のコントロールを移動させるアプローチは、私が行かなければならなかったものです。しかし、私はコントロールのロジックをそのまま再利用するために自己完結型にしたかったので、アニメーションをコントロールに残しましたが、サイズ変更に反応する代理人を追加し、デリゲートの呼び出しをアニメーションブロック内に入れました。完全な開示では、新しい月のカレンダーをコントロールにアニメーション化していますが、私はコントロールを拡張しています。このようにして、アニメーションブロックでこれらの両方を実行できます。
// inside the calendar control:
[UIView animateWithDuration:0.5 animations:^{
self.frame = newOverallFrame; // animate the growth of the control
_offScreenCalendar.frame = newOnScreenFrame; // animate new month on screen
_onScreenCalendar.frame = newOffScreenFrame; // animate old month off screen
if (self.delegate)
{
[self.delegate handleCalendarControlSizeChange:newOverallFrame]; // animate other controls per the delegate
}
}];
:
ので、終了コードは次のようになります
- 1. データが変更されたときに画面をリロード - ネイティブアプリに反応する
- 2. アニメーションでUIControlのサイズを変更する
- 3. タブが変更されたときの変更サイズを表示
- 4. OpenGLウィンドウのサイズを変更したときにVBOデータを効率的にサイズ変更する方法は?
- 5. NavBarの高さが変更されたときにコンテンツのサイズを変更する方法
- 6. divのサイズを変更したときにフォームのレイアウトが変更される
- 7. 同形反応WebアプリケーションでUIが変更されたときにHTMLマークアップが変更されない
- 8. データが変更されたときにリストビューを更新する
- 9. ウィンドウのサイズが変更されたときにウェブサイトを維持する方法
- 10. 言語が変更されたときにフォームのサイズを変更します。
- 11. Angular2コンポーネント親のサイズ変更が変更されたときにリッスンします
- 12. DOMが変更されたときにGoogleマップのサイズを変更する方法はありますか?
- 13. ウィンドウのサイズが変更されたときに、メニューバーのサイズが変更されない
- 14. Jquery UI - ダイアログのサイズが変更されたときにオーバーレイのサイズが変更されない
- 15. 角4:@入力変数の変更に反応する方法
- 16. Tkinter/Python - ウィンドウのサイズが変更されたときにボタンのサイズ変更を無効にする
- 17. データが変更されたときにtdまたはtrの背景色を変更する方法
- 18. 更新マージン:divがサイズ変更されるときに自動
- 19. サイズ変更時にキャンバスゲームを反応させる
- 20. PySpark RuntimeError:反復中にサイズが変更されました
- 21. イメージをビューにサイズ変更する - ネイティブに反応する
- 22. Cordovaカメラの向きが変更されたときのサイズ変更
- 23. 州の小道具が変更されたときに反応コンポーネントが更新されない
- 24. ブラウザのサイズが変更されたときに右の空白
- 25. ウィンドウのサイズが変更されたときにTkinterウィジェットとキャンバスのサイズを変更しますか?
- 26. ネイティブスタイルのコンポーネントに反応するダイナミックフォントのサイズ変更
- 27. コンテナビューのサイズが、エンベデッドコントローラのビューの高さの制約が変更されたときに変更されない
- 28. ページの向きが変更されたときにスライダコントロールが正しくサイズ変更されない
- 29. fileNameが変更されているときに(R.raw.fileName)を変更する方法
- 30. Highchartsデータのサイズ変更時にグラフが100を超えるとサイズ変更