2011-08-10 9 views
0

私はUIViewのサブクラスを作成していますが、mファイル内からビューを拡大/縮小しようとしていますが、いくつかの問題が発生しています。コマンドを使用したとき: self.frame = CGRectMake(self.frame.origin.x-10,self.frame.origin.y-10,self.frame.size.width/2,self.frame.size.height/2);オブジェクトは位置を移動しますが、サイズは変更されません(ビューにはいくつかのUIImageViewsのみが含まれています)。サブクラスのxibファイルには、サブビューをクリップし、サブビューを自動サイズ変更するオプションがありますが、どちらも起こらないようです。ビューがこのコマンドでサイズ変更されない理由と、サイズを変更する方法を知りたいサブクラス化されたUIViewのスケーリング

+1

フレームをリセットした後、ビューのサイズが変わらないのですか?あなたは100%肯定的ですか?それを画面上で見ることができるように、背景色を変更してみてください。またはあなたのサブビューはサイズを変えたり移動したりすることになっていますか? – MishieMoo

+0

サブビューに 'autoresizingMask'がありますか?フレームを変更するのではなく、 'transform'を使ってUIViewを拡大縮小したいのですか? – Cyrille

答えて

1

ビューのサイズ変更は、サイズ変更と同じではありません。あなたの考えを絵のフレームと考えてください。上でやっているのは、フレームを動かして右下を動かすことです(フレームの木の棒を短くしています)。しかし、それは自動的に画像を縮小しません。

サブビューを持つビューのサイズを変更する4つの方法があります。

  1. は(view.clipsToBounds = YESを設定することによって)そのサブビュースーパークリップをしてみましょう:サブビューは、サイズ変更や再レイアウトが、唯一の内側にある領域に表示されません。フレーム。
  2. スーパービューにサブビューをクリップさせません(view.clipsToBounds = NOを設定してください):スーパービューサイズを変更すると、サブビューに視覚効果はなく、フレーム外にも表示されます。
  3. autoresizingMask s:サブビューのサイズは変更されませんが、自動サイズ変更マスクに従って再レイアウトされます(たとえば、サブビューは常にフレームの右下隅から10ピクセル離れた位置にあるか、常に正確にフレームの幅)。これは必ずしもサブビューの内容を自動的に拡大するとは限りません。それに応じてsubview.contentModeを設定します。
  4. スーパービューをスケールする:superview.transform = CGAffineTransformScale(superview.transform, 0.5, 0.5)を設定すると、スーパービューとそのすべてのサブビュー(本質的にはズームアウト)が縮小されます。これにより、superview.frameが未定義になります。これは、これをもう使用しないことを意味します。また、少しぼやけさせることもできます。

また、すべてのサブビューを「手動で」変更することもできますが、そのような種類のビューを使用すると、見栄えの良いビュー階層を作成することができなくなります。

MishieMooによると、一時的にスーパービューのbackgroundColorを見えるように設定しました。これは、あなたの意見が実際に変化していることを示す可能性が非常に高いでしょう。

関連する問題