我需要使用以下代码创建一个自定义类,以便在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
我该怎么做?
此外,上面的代码会为我的应用中的每个导航栏添加阴影。怎么控制这个?我只需要在一个或两个导航栏上使用阴影。
答案 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的继承(子类)。