4

UIView Background を複数の色で塗りつぶしたいと思います。一種のステータスバーとして使用したいので、必要な手順の 1/2 が完了すると、UIView の背景は 1/2 緑と 1/2 赤になります。ユーザーがさらに多くのステップ (たとえば 2/3) を完了すると、UIView の背景の多くが緑色に変わります (この場合は 2/3)。

オーバーライドする必要があると思います

-(void) drawREct: (CGRect) rect

UIView を取得し、その大きさを把握し、それを 2 つの四角形に分割して、それらの四角形を埋めると想像します。

もう 1 つのオプションは、プログラムで 2 つの UIView を追加することですが、私は IB のファンです。

私が望むように UIView を分割することは可能ですか?

ありがとう

4

2 に答える 2

10

これは IB ソリューションではありませんが、UIView をサブクラス化し、drawRectメソッドをオーバーライドしてカスタム グラデーションを追加できます。これにより、好きな数の色を配置し、それらをハードまたはスムーズに移行させることができます. これを行うためのさまざまな方法が必要な多くの優れたチュートリアルがオンラインにあります (より複雑なものもあれば、非常に単純なものもあります)。

かなり単純なもう 1 つのオプションは、オーバーライドdrawRectし、背景を赤にfillしてから、ビューの下半分を占める長方形にすることです。色間の派手な遷移や滑らかな遷移はできませんが、実装は非常に簡単です。たとえば、次の行に沿ったものが機能するはずです。

-(void)drawRect:(CGRect)rect {
    CGRect upperRect = CGRectMake(rect.origin.x, rect.origin.y, rect.size.width, rect.size.height * percentDone);
    CGRect lowerRect = CGRectMake(rect.origin.x, rect.origin.y + (rect.size.height * percentDone), rect.size.width, rect.size.height *(1-percentDone));

    [[UIColor redColor] set]; 
    UIRectFill(upperRect);
    [[UIColor greenColor] set]; 
    UIRectFill(lowerRect);
}

これは、ユーザーのステップに関連付けることができるfloat percentDone(宣言、、property(nonatomic))です。synthesize次に、ユーザーが何かを行ったときにビューを更新するだけです

splitView.percentDone = .5;
[splitView setNeedsDisplay];

これもアニメーションで滑らかにすることができます。

于 2011-06-16T16:46:04.903 に答える
3

簡単な方法は、背景ビューの背景色をたとえば赤に設定することです。次に、そのバックグラウンド ビューに別のビューを追加し、それをインジケーター ビューと呼びます。背景をカバーするようにインジケーター ビューのサイズと位置を調整し、背景色を緑に設定します。インジケーター ビューをビュー コントローラーのアウトレットに接続し、必要に応じてビュー コントローラーで幅 (または高さ) を調整して、目の前のタスクの進行状況に対応させます。

@PengOne が示唆する別の方法は、カスタム ビューを作成し、「進行状況」プロパティを指定し、-drawRect: をオーバーライドしてコンテンツを適切に描画することです。この道を行くなら、少しクリエイティブになるのを止めるものは何もありません。2 つの長方形を塗りつぶすだけでなく、2 つの色の境界をもう少し興味深いものにします。波紋や泡を追加し、適切な効果音を付けて、液体が入った容器のように見せることができます。または、画面をゆっくりと埋めるQixのようなアニメーションを実行することもできます... ;-)

于 2011-06-16T20:24:43.947 に答える