Ton*_*shi 37 iphone objective-c
想知道为UINavigationbar创建投影.我尝试使用投影创建自定义导航栏背景,但投影覆盖背景视图.
@implementation UINavigationBar (CustomImage)
- (void)drawRect:(CGRect)rect {
UIImage *image = [[UIImage imageNamed:@"titleBar.png"] retain];;
[image drawInRect:rect];
[image release];
}
- (CGSize)sizeThatFits:(CGSize)size {
CGSize newSize = CGSizeMake(320,50);
return newSize;
}
@end
I also tried on following solution: http://www.travisboudreaux.com/adding-a-drop-shadow-to-a-uinavigationbar:
@interface UINavigationBar (dropshadow)
-(void) applyDefaultStyle;
@end
@implementation UINavigationBar (dropshadow)
-(void)willMoveToWindow:(UIWindow *)newWindow{
[self applyDefaultStyle];
}
- (void)applyDefaultStyle {
// add the drop shadow
self.layer.shadowColor = [[UIColor blackColor] CGColor];
self.layer.shadowOffset = CGSizeMake(0.0, 3.0);
self.layer.shadowOpacity = 0.25;
}
@end
Run Code Online (Sandbox Code Playgroud)
它显示我的导航栏按钮的阴影,但没有导航栏本身.
最终解决方案: 这是我为UINavigationBar创建投影的方法.非常感谢MusiGenesis指出我的代码缺失的链接:
#import <QuartzCore/QuartzCore.h>
@interface UINavigationBar (CustomImage)
-(void) applyDefaultStyle;
@end
//Override For Custom Navigation Bar
@implementation UINavigationBar (CustomImage)
- (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
Run Code Online (Sandbox Code Playgroud)
**记得输入quartzcore或它会抛出错误.
Chr*_*lay 44
如果对a应用投影,阴影将UINavigationBar
被剪裁在角落下方:
这就是阴影在矩形上的行为方式.我通常会创建一个比实际导航栏更宽的阴影路径,这会创建一个更像您通常期望的效果:
@implementation UINavigationBar (DropShadow)
-(void)willMoveToWindow:(UIWindow *)newWindow {
[super willMoveToWindow:newWindow];
self.layer.shadowColor = [UIColor blackColor].CGColor;
self.layer.shadowOpacity = 1;
self.layer.shadowOffset = CGSizeMake(0,4);
CGRect shadowPath = CGRectMake(self.layer.bounds.origin.x - 10, self.layer.bounds.size.height - 6, self.layer.bounds.size.width + 20, 5);
self.layer.shadowPath = [UIBezierPath bezierPathWithRect:shadowPath].CGPath;
self.layer.shouldRasterize = YES;
}
Run Code Online (Sandbox Code Playgroud)
Mus*_*sis 30
在applyDefaultStyle
,尝试添加此行:
self.layer.masksToBounds = NO;
Run Code Online (Sandbox Code Playgroud)
此属性的默认值是YES
,这意味着即使渲染阴影,它也不会在视图边界之外渲染,这实际上意味着您根本看不到它.
如果您以任何方式为此视图设置动画,则还应添加以下行:
self.layer.shouldRasterize = YES;
Run Code Online (Sandbox Code Playgroud)
...除非你想让动画变得缓慢而生涩.
从iOS 6.0开始,UINavigationBar有一个属性shadowImage:
@property(nonatomic,retain) UIImage *shadowImage NS_AVAILABLE_IOS(6_0) UI_APPEARANCE_SELECTOR;
Run Code Online (Sandbox Code Playgroud)
这当然大大简化了这个非常常见的任务:D
归档时间: |
|
查看次数: |
18953 次 |
最近记录: |