1

の背景としてカスタム画像を使用するコードを書いていますUIView

アプリは縦向きでのみ実行されます。4 インチの Retina スクリーンの前は、固定サイズの手描きの png を背景画像として使用してcard.pngいました (下図)。次のようなコードがありました。

UIView* frontView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height)];
frontView.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;

UIImage* cardImage = [UIImage imageNamed:@"card.png"];
UIImageView* im = [[UIImageView alloc] initWithImage:cardImage];
im.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleBottomMargin;
[frontView addSubview:im];

// frontView has a bunch of stuff added...

ご想像のとおり、これを iPhone 5 で実行すると、手描きの png を除いて、すべてのサイズと位置を動的に変更できますcard.png。その背景画像は利用可能な全高を使用していません...

で、やりたい(と思う)のは、こんな感じかな…

UIImage* cardImage = [[UIImage imageNamed:@"card_resizable.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(72, 0, 60, 0)];

私は次のように再描画card.pngしましたcard_resizable.png-高さ140ピクセル、中央に8ピクセルのチャンクがあり、これを並べて表示したいので、上部のインセットは高さ72ピクセル、下部のインセットは高さ60ピクセルです。

次のステップは何ですか?

UIImageViewの動的サイズでを作成する必要がありfrontViewますか?

サイズ変更可能な画像のサイズを変更するにはどうすればよいですか?

私が試したいくつかのこと...サイズ変更可能な画像を並べて表示する結果にはなりませんでした。

乾杯、ギャビン

アップデート:

これらの値UIEdgeInsetsMake(72, 0, 60, 0) は画像に基づいてい@2xます。- に変更するUIEdgeInsetsMake(36, 0, 30, 0)と、正しい垂直方向のサイズ変更が行われます。

マイクが指摘したように、のサイズをUIImageView親に設定し、正しく設定する必要がありましたautoresizingMask:

im.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

UIImageView親ビューを埋めるために、サイズが動的に正しくサイズ設定されていることを知っています- frontView(3.5インチ画面と4インチ画面の両方で視覚的に確認できるように、背景を緑色にしました.

サイズ変更可能な画像cardImageも、垂直面で正しくサイズ変更されています。

4

3 に答える 3

-1

UIView contentMode プロパティを見てください。サイズが変わるたびに、UIImageViewが画像を内部でレンダリングする方法についてある程度理解できるはずです。

于 2013-04-23T08:22:42.117 に答える