如何创建自定义类以向UINavigationBar IOS添加阴影

时间:2015-08-12 06:05:22

标签: ios objective-c uinavigationbar shadow

我需要使用以下代码创建一个自定义类,以便在iOS中将阴影设置为UINavigationBar。

@interface UINavigationBar (CustomImage)

-(void) applyDefaultStyle;

@end
@implementation UINavigationBar (DropShadow)
- (void)drawRect:(CGRect)rect {
    UIImage *image = [UIImage imageNamed: @"titleBar.png"];
    [image drawInRect:CGRectMake(0, 0, 320, 44)];
}

-(void)willMoveToWindow:(UIWindow *)newWindow{
    [super willMoveToWindow:newWindow];
    [self applyDefaultStyle];
}

- (void)applyDefaultStyle {
    // add the drop shadow
    self.layer.shadowColor = [[UIColor blackColor] CGColor];
    self.layer.shadowOffset = CGSizeMake(0.0, 3);
    self.layer.shadowOpacity = 0.25;
    self.layer.masksToBounds = NO;
    self.layer.shouldRasterize = YES;
}@end

我该怎么做?

此外,上面的代码会为我的应用中的每个导航栏添加阴影。怎么控制这个?我只需要在一个或两个导航栏上使用阴影。

2 个答案:

答案 0 :(得分:1)

每个UINavigationBar受影响的原因是因为您创建的代码category并修改了现有的类。

您需要将类别更改为子类

@interface CustomNavigationBar : UINavigationBar
...
@end

@implementation CustomNavigationBar
...
@end

然后,您可以使用UINavigationController initWithNavigationBarClass:toolbarClass:并在您希望影响的导航控制器上提供CustomNavigationBar课程:

UINavigationController *navController = [[UINavigationController alloc] initWithNavigationBarClass:[CustomNavigationBar class]
                                                                                      toolbarClass:nil];

// Make sure to provide a root view controller
[navController setViewControllers:@[rootViewController] animated:NO];

答案 1 :(得分:1)

您已经为UINavigationBar实施了类别,这将影响所有UINavigationBar&它是自定义UINavigationBar(UINavigationBar的子类)。

如果只想在选定的导航栏上显示此行为,则可以采用UINavigationBar的继承(子类)。

Take a look at this tutorial 1

Tutorial 2