1

私のアプリでは、背景としてグラデーションがあります。このグラデーションはプログラムで作成されます。私が今これを使用する方法は次のようなものです:

UIViewControllerグラデーションを表示する必要があるクラスがあり、そのクラスでこれを行います:

- (void) viewWillAppear:(BOOL)animated{
    [super viewDidAppear:animated];
    [Gradient gradientInViewController:self];
}

これはそれほど悪くはありませんが、すべてのクラスでこれを行う必要があり、あまり良いプログラミングではありません。私が欲しいのは、クラスを a にする代わりに、のサブクラスであるUIViewControllera にしたいのですが、このクラスではすべてを処理します。GradientViewControllerUIViewController

だから私の質問はどうすればいいですか?これはカテゴリを通じて行う必要があると思いますか?しかし、画面に画像を表示する方法がわかりません。これはviewWillAppearか何かで行うべきですか?

4

4 に答える 4

2

GradientViewControllerグラデーション描画を扱うを作る

@interface GradientViewController : UIViewController

@end

@implementation GradientViewController

- (void) viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    [Gradient gradientInViewController:self];
}

@end

次に、それから他のすべてのコントローラーを継承します

@interface YourViewController : GradientViewController

@end

@implementation YourViewController

- (void) viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    // no need to do anything
}

@end

ただし、多少の繰り返しがあっても、ヘルパー クラスまたはカテゴリを介して行う方がより柔軟です。

Nguyen Ducが指摘したように、あなたが求めているのは間違っていることに注意してください[super viewDidAppear:]viewWillAppear:私は答えを編集しました。

于 2013-10-31T08:22:50.187 に答える
1

Interface Builder を使用して、画像を自動的にロードする方法を知っている xib を用意してみませんか?

于 2013-10-31T08:23:44.927 に答える
0

GradientViewController新しいView Controllerを作成し(たとえば、それを呼び出しましょう)、グラデーションをビューviewWillAppearに描画する同じコードを配置し、すべてのView ControllerをView Controllerのサブクラスに置き換えます

@interface SomeViewController : UIViewController

@interface SomeViewController : GradientViewController
于 2013-10-31T08:20:38.237 に答える
0

UIViewController をサブクラス化するだけで、アプリ全体でこの動作を「無料」で取得できます。

@interface GradientViewController : UIViewController 
@end

グラデーションコードをそのまま実装しますviewDidLoad::-

- (void)viewDidLoad
{
    [super viewDidLoad];
    [Gradient gradientInViewController:self];
}

次に、グラデーションが必要なすべての場所で UIViewController の代わりに GradientViewController を使用します。

または、カテゴリを使用することもできます。アプリの「テーマ」にカテゴリを使用して、 のさまざまな UI 要素を構成できるため、これは便利ですUIViewController。ただしUIViewController、グラデーションを設定するために特別にカテゴリを設定し、それを必要とするすべてのビュー コントローラーでカテゴリ メソッドを呼び出します。オーバーライドまたは カテゴリでそれを実行しようとしないでくださいviewDidLoad:viewWillAppear:

于 2013-10-31T08:29:13.630 に答える