1

在我的应用程序中,我有一个渐变作为背景。此渐变是通过编程方式制作的。我现在使用它的方式是这样的:

我有一个UIViewController需要显示渐变的,在那个类中我这样做:

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

这还不错,但是这需要在所有不是很好编程的类中完成。我想要的是而不是创建一个类 a UIViewController,我希望它GradientViewController是一个子类,UIViewController并且在这个类中我将处理所有事情。

所以我的问题是我该怎么做?我认为这必须通过类别来完成?但我不知道如何在屏幕上显示图像。这应该在 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),将绘制渐变的相同代码放入其视图viewWillAppear中,然后通过替换使所有视图控制器成为视图控制器的子类

@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];
}

然后在需要渐变的任何地方使用 GradientViewController 而不是 UIViewController 。

或者,您可以使用类别。这很有用,因为您可以为您的应用程序使用“主题”类别,配置您UIViewController的 s 的各种 UI 元素。但是我会UIViewController专门设置一个类别来设置您的渐变,然后在每个需要它的视图控制器中调用类别方法 - 不要尝试通过覆盖viewDidLoad:viewWillAppear:在类别中来做到这一点。

于 2013-10-31T08:29:13.630 回答