2012-02-22 9 views
1

私は、UIViewのcontentStretchプロパティの使用方法を理解する助けが必要です。私は、1)私が行っている効果を達成する方法に関するいくつかのガイダンスと、2)このプロパティの使い方に存在する包括的なドキュメントへの参照に感謝します。 Appleのドキュメントを理解していると思っていましたが、私は今は理解していません。ここに私がやろうとしていることがあります。contentStretchを使用してUIViewの一部を伸ばす

図aのようなビューをレンダリングするカスタムUIViewがあります。以下。このUIViewのdrawRectメソッドは、左の内側のボックス(丸い角と白の背景)を、他のビューに使用されるものとは異なる色と効果でペイントします。また、UIViewの4つのコーナーはストレッチ可能ではありません(ひずみの原因となります)ので、UIViewバックグラウンドの中心のみを引き伸ばす必要があります。

私はこの図を図bのような形に拡大したいと考えています。以下。そうすることで、UIViewの高さを増やすと、白いボックスの外側(または白いボックスの右側)の部分だけが引き伸ばされ/繰り返されます。私の試みの全てにおいて

sketch1

私はCと同様の図で見ると結果の幅全体に影響strecthを生成することができました。

sketch2

は、それは私が私が欲しい効果を達成するために(図B)。contentStretchを使用可能ですか?ビュー全体を再描画するのに手間がかかっているはずの他のテクニックはありますか、これについての唯一の(または最良の)方法を再描画していますか?

おかげで、

答えて

1

これはcontentStretchを実現するためにそのトップ縁が白いボックスの以下下端であり、従ってその左というように、あなたはcontentStretch四角形を設定する必要がありますエッジは、白いボックスの右端ののにあります。あなたは、あなたの背景のパターンがあまりにも引き伸ばされ、醜く見えるかもしれません。

代わりに、白いボックスだけを描画するサブビューを表示します。ボックスが左上にあり、ストレッチしないように、サブビューのスプリングとストラットを設定します。

+0

上記の数字は少し誤解を招くことがあります。それらは私の実際のビューの単純なワイヤフレームです(説明のために)。私の実際のビューでは、白いボックスは透明な(アルファ= 0)ウィンドウなので、サブビューにして、バックグラウンド上のウィンドウのように動作させる方法はわかりません。 contentStretch矩形を白いボックスの右下に設定すると(これは私が試みなければならないと思ったことですが)、白いボックスの下の領域が非伸縮性領域(伸張すると背景が歪む)。 – kodie

+0

その場合は、 'UIViewContentModeRedraw'を使って' drawRect: 'で必要なものを描画してください。 –

+0

それは私が恐れていただけでなく、私が期待したものです。ありがとう、 – kodie

0

私が一番上に伸縮性ホワイトボックス、およびcolorWithPatternImage使用パターンで塗りつぶされた背景ビューになるだろう:

patternView.backgroundColor = [UIColor colorWithPatternImage:@"myBackgroundPattern.png"]; 

と黒のストロークをして行うことができる:

#include <QuartzCore/QuartzCore.h> 
... 
patternView.layer.borderWidth = 2.f; 
patternView.layer.borderColor = [[UIColor blackColor] CGColor]; 
0

何達成しようとしているのは、UIImageのresizableImageWithCapInsetsメソッドを使用して行うことができます。このようにして、画像の各辺にキャップ幅を設定し、画像のどの部分を繰り返していく必要があるかを指定することができます(伸ばさない)。

アンUIEdgeInsetはとしては、以下の四つの成分(CGFloat topCapWith、CGFloat leftCapWith、CGFloat bottomCapWith、CGFloat rightCapWith)

コンテンツストレッチがある

UIImage * backgroundImage = [[UIImage imageNamed:@"Stretch.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(80, 4, 4, 10)]; 
    backgroundImageView.image = backgroundImage; 
0

ためのコードは以下のトリックを行うだろうからなる構造体であります推奨されない方法は、自動レイアウトを使用することです。内側の矩形では、定義されている高さと幅の定数を与え、その上限と上限の制約を親ビューにバインドします。 外側の四角形の底部の拡大を取得するには、その下の拘束をバインドするか、高さを変更することもできます。

関連する問題