1

したがって、ユーザーに存在する高さと幅のフレームで初期化されたuiviewがあります。ユーザーがこのフレーム内に描画できるようにしたいのですが、ユーザーがボタンを押すと、ビューがカットされます。その余分な無駄なスペースを取り除いて、フレームがユーザーが描いていたものと同じ大きさになるようにします。私はこのようなことをしようとしました

CGRect boundbox = CGPathGetBoundingBox([myPath CGPath]);
boundbox.origin.x = self.frame.origin.x;
boundbox.origin.y = self.frame.origin.y;
self.frame = boundbox;

ただし、これによって余分な無駄なスペースが削除されるわけではなく、ビューのサイズが変更されるだけなので、描画されたコンテンツは以前よりも小さく見えます。代わりに私がやりたいのは、その「空白」を削除することです。uiviewのコンテンツをスケールアップできるかどうかを考えていましたが、よくわかりません。

私が何を意味するのかを明確にするために:

ここに画像の説明を入力してください

赤い境界線はユーザーが描画できる領域/フレームであり、中央のテキストは描画です。ユーザーがボタンを押すと、図2のようにフレームが描画を囲むだけになります。

ここに画像の説明を入力してください

次のシナリオがあるとしましょう。画面の中央に円を描きました。

ここに画像の説明を入力してください

次にボタンを押すと、スケールは同じままですが、円は同じ位置にありますが、描画領域が変更されたため、円/描画は図4のように切り取られたように見えます。

ここに画像の説明を入力してください

私がやりたいのは、描画/ベジェパスをフレームの中央に配置されるように移動することです。赤い領域が青い円を囲むようにします。

4

1 に答える 1

1

[編集] あなたの絵を考えて。UIViewは、フレームプロパティ(またはCGRect)を変更しても、アイテムを再配置しません。この場合、自分で描いたアイテムを追跡する必要があります。次に、ボタンが押されたときに、オブジェクトの変換を自分で実行します。

つまり、最も左にあるオブジェクト、一番上にあるオブジェクトを見つけてから、すべてのオブジェクトをその量だけ左に移動し、その量だけ上に移動して、すべてのオブジェクトを(グループとして)左上に揃える必要があります。ビューのフレーム内。この後、どのオブジェクトが最も右に触れ、どのオブジェクトが最も下に触れているかを自己認識する必要があります。

これで、アイテムを左上に移動したので、一番右のポイントがフレームの幅を定義し、一番下のポイントがフレームの高さを定義します。

必要に応じて、これを実行した後、以下のプロパティを使用してズームインできるはずです。

[最初の回答] あなたの質問を正しく理解していれば、ボックスフレームの操作を実行したい場合もありますが、拡大縮小したい場合は、

contentScaleFactor or
contentStretch

プロパティ。

contentScaleFactorは、単一の浮動小数点値(つまり、xWidth * scaleFactor、yHeight *スケール係数)に基づいて両方のディメンションをスケーリングする必要があります。

contentStretchはCGRectであり、各ディメンション(軸)を個別にスケーリングする必要があることを意味します。

于 2012-06-03T18:42:35.423 に答える