1

ユーザーがクリックしたときにサイズを変更する必要があるウィンドウがあります。私は[self setFrame:windowFrame display:YES animate:YES]これを達成するために使用しています。

ウィンドウのサイズは正常に変更されますが(高さを大きくします)、ウィンドウの内容も一緒に上に移動します。これを防ぐにはどうすればよいですか?中身はそのままにしておきたい。

私はOSXMountainLionで、Objective-CとCocoaを使用してOSX用のアプリを開発しています。

編集:ウィンドウのサイズが変更された後にコンテンツを移動する必要があるため、制約やスプリングとストラットが機能しません。

4

4 に答える 4

2

これらのビューを構築するために Interface Builder を使用している場合、1 つのアプローチは「支柱とスプリング」を設定することだと思います。これらは「サイズインスペクター」の下で利用でき、「自動サイズ調整」ラベルの上の赤い矢印とバーです。これらをいじって、必要な効果を得ることができますが、一般的な考え方は、矢印が親ビューのサイズの変化に合わせてビューのサイズを調整する方法を制御し、バーがビューの端の関係を制御することです。サイズが変更されると、親ビューの端に移動します。

于 2012-09-07T03:02:44.673 に答える
2

ウィンドウのサイズを変更した後にコンテンツを移動する必要があるため、制約やスプリングとストラットは機能しません。

その場合、NSViewAnimationを使用する必要があります。

単一のビュー アニメーションは、実際には複数のビューに対して複数のアニメーションを実行できます。クラスの名前と Cocoa ではウィンドウがビューではないという事実にもかかわらず、ウィンドウに対して 1 つのアニメーションを実行することもできます。

initWithViewAnimations:ディクショナリの配列を取る でビュー アニメーションを作成します。各ディクショナリは、ターゲット ( NSViewAnimationTargetKey) とそれに対して何をすべきかを識別します。ターゲットのフレームを変更する (NSViewAnimationStartFrameKeyおよびNSViewAnimationEndFrameKey) か、ターゲットをフェード インまたはフェード アウト ( NSViewAnimationEffectKey) します。あなたの場合、ターゲットのフレームを変更します。

ユーザーがウィンドウのサイズを変更する操作を行った場合、ウィンドウの全体的なサイズを計算する必要があります (ウィンドウが画面からはみ出さないように、フレームの位置を調整するように注意してください)。ビューの新しいフレーム (位置とサイズの両方)。移動したり、サイズを変更したり、その辞書を作成したり、配列にスローしたりするすべてのもの。次に、ビュー アニメーションを作成します。

NSViewAnimation は一種のNSAnimationであり、アニメーションの開始と停止、進行状況の監視、アニメーションへのフック、および複数の NSAnimation の連鎖のためのすべてのメソッドを提供します。他に何もない場合は、アニメーションを開始する必要があります。

于 2012-09-09T15:28:41.993 に答える
0

制約ベースのレイアウトでは、ウィンドウの端の周りのビューを、スーパービューの端から一定の距離に設定します。

Xcodeはそれから多くのサイズ変更可能性を推測します。それでもサイズが適切に変更されない場合は、幅や高さが一定でなくなるように制約を調整します。

最も簡単な方法は、エディターに青い線が表示されるまでビューを移動することです。青い線はそれぞれ、物事をどのようにレイアウトするかについてのHIGのルールに対応しており、そこにビューをドロップすると、Xcodeはそれらのガイドラインに一致する制約を作成します。たとえば、スーパービューの右端から20ポイントのビューを設定すると、そのための青い線が表示され、そこにビューをドロップすると、ビューがその距離を維持する必要があるという制約が作成されます。そのエッジ。

HIGベースのコンストレイントを作成できるビューはスーパービューだけではありません。兄弟ビュー間にガイドライン制約を作成することもできます。たとえば、ボタンを別のボタンの横に適切な距離で配置すると、その距離を横切る青い線が表示され、ドロップすると、これら2つのボタンがそれぞれからその距離を維持する必要があるという制約が作成されます。他の。

本当にカスタムなことをしたい場合は、nibエディターの右下隅にある3つのボタンを使用して、必要な制約を作成できます。選択したものによって、作成できる制約が決まります。ニブエディタのアウトラインビューは、必要な選択肢があることを確認するのに役立ちます。

于 2012-09-07T17:42:10.410 に答える
0

すべてのサブビューを反復処理し、ウィンドウフレームのデルタに基づいてそれらのフレーム位置を変更する必要があります。

したがって、ウィンドウフレームをすべての方向に20拡大すると、すべてのサブビューは、ウィンドウの動きを相殺するために、フレーム位置を(20,20)増やす必要があります。

于 2012-09-14T00:12:40.117 に答える