我有自定义UIBarButtonItem的问题.当我通过创建自定义UIBarButtonItem时
- [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"FilterIcon.png"] style:UIBarButtonItemStyleBordered target:self action:@selector(filterTouched:)];
生成的按钮没有“浮雕”外观,系统项目通过在其图标后面放置一个半透明的黑色阴影来实现.
在左侧,您可以看到“组织”系统栏按钮项,右键是上面代码的结果.
在资源中创建阴影是徒劳的,因为iOS / Cocoa只使用图像的掩码并丢弃任何颜色信息.
有趣的是,如果我在Interface-Builder中创建条形按钮项,它看起来很好.但是,在我的问题的上下文中,我需要在代码中创建按钮项.
@R_502_323@
James Furey的剧本有Objective-C版本.
- - (UIImage *)applyToolbarButtonStyling:(UIImage *)oldImage {
- float shadowOffset = 1;
- float shadowOpacity = .54;
- CGRect imageRect = CGRectMake(0,oldImage.size.width,oldImage.size.height);
- CGRect shadowRect = CGRectMake(0,shadowOffset,oldImage.size.height);
- CGRect newRect = CGRectUnion(imageRect,shadowRect);
- UIGraphicsBeginImageContextWithOptions(newRect.size,NO,oldImage.scale);
- CGContextRef ctx = UIGraphicsGetCurrentContext();
- CGContextScaleCTM(ctx,1,-1);
- CGContextTranslateCTM(ctx,-(newRect.size.height));
- CGContextSaveGState(ctx);
- CGContextClipToMask(ctx,shadowRect,oldImage.CGImage);
- CGContextSetFillColorWithColor(ctx,[UIColor colorWithWhite:0 alpha:shadowOpacity].CGColor);
- CGContextFillRect(ctx,shadowRect);
- CGContextRestoreGState(ctx);
- CGContextClipToMask(ctx,imageRect,[UIColor colorWithWhite:1 alpha:1].CGColor);
- CGContextFillRect(ctx,imageRect);
- UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
- UIGraphicsEndImageContext();
- return newImage;
- }