iOS 7通知中心就像标签一样
在iOS7通知中心,标签(和分隔线)有一个非常有趣的背景:模糊图像和看起来像柔光混合模式。
我不确定要搜索什么。 关于如何做到这一点的指针将非常感激。
到目前为止,我试图通过使用label.textColor = [UIColor colorWithPatternImage:...]
设置模糊图像的一部分作为背景来复制效果。 当背景全是黑色(或白色)并且导致文本变得不可读时,这也不能解释这种情况。
但这似乎并不正确。
喜欢这个:
以下是我所尝试的:
- (void)viewDidLoad
{
[super viewDidLoad];
const CGFloat fontSize = 25.f;
const NSString *text = @"A long-ish string";
CGSize size = [text sizeWithAttributes:@{NSFontAttributeName: [UIFont fontWithName:@"Avenir Next" size:fontSize]}];
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(80, 270, size.width, size.height)];
label.font = [UIFont fontWithName:@"Avenir Next" size:fontSize];
label.textAlignment = NSTextAlignmentNatural;
label.backgroundColor = [UIColor clearColor];
label.text = text;
UIImage *image = [UIImage imageNamed:@"wat@2x"];
UIImage *blurredImage = [image applyBlurWithRadius:20.5 tintColor:[UIColor clearColor] saturationDeltaFactor:1.f maskImage:nil];
UIImageView *imageView = [[UIImageView alloc] initWithImage:[blurredImage applyDarkEffect]];
imageView.frame = self.view.bounds;
CGFloat imgScale = image.scale;
CGRect labelFrame = label.frame;
CGRect realRect = CGRectMake(labelFrame.origin.x * imgScale, labelFrame.origin.y * imgScale, labelFrame.size.width * imgScale, labelFrame.size.height * 2.0);
CGImageRef labelPatternImage = CGImageCreateWithImageInRect(image.CGImage, realRect);
label.textColor = [UIColor colorWithPatternImage:[UIImage imageWithCGImage:labelPatternImage scale:2.f orientation:UIImageOrientationUp]];
CGImageRelease(labelPatternImage);
[self.view addSubview:imageView];
[self.view addSubview:label];
}
此代码导致代码结果http://caughtinflux.com/static/result.png
如您所见,这与NC标签不同。
编辑
文字的模糊图像背景应尽可能与实际背景对齐。 希望我的代码的模拟器截图有助于理解我在说什么。
你是否尝试调整标签的alpha值(尽可能简单)? 您可以尝试,也可以在将其应用于标签之前为模糊添加一些白色。
这是一个模糊效果。 你可以在UIImage上找到Apple的类别,这个效果可以在这里下载。 文件名称是UIImage + ImageEffects.h / UIImage + ImageEffects.m任何你可以像这样使用它:
UIImage *backgImage = [image applyBlurWithRadius:2
tintColor:tintColor saturationDeltaFactor:0.8 maskImage:nil];
//扩展
你可以用它上面的标签创建你的视图,可以说是白色的文字颜色(当你模糊整个视图时突出显示),然后你可以创建该视图的快照并将其设置为视图的背景使用(由[self.view setBackgroundColor:[UIColor colorWithPatternImage:blurredImage];
)。
UIView *snapshotView = [YOURUIVIEW resizableSnapshotViewFromRect:self.contentView.frame afterScreenUpdates:YES withCapInsets:UIEdgeInsetsZero];
UIGraphicsBeginImageContextWithOptions( self.contentView.bounds.size, YES, 0.0f);
BOOL result = [snapshotView drawViewHierarchyInRect:self.contentView.bounds
afterScreenUpdates:YES];
UIImage *snapshotImage =
UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
if (result){
UIColor *tintColor = [UIColor colorWithWhite:0.97 alpha:0.82];
UIImage *blurredImage = [snapshotImage applyBlurWithRadius:4 tintColor:tintColor saturationDeltaFactor:1.8
maskImage:nil];
}
让我知道这是你需要的东西。 如果它不能解释一遍,有更多的细节,你想达到什么目的?
我有一个包含分隔符,选定背景视图和(截至今天)标签的通知中心的示例项目。
你可以在这里看看它:https://github.com/mikrohard/BluredTableView
可能还存在一些错误,性能问题等,但可随意使用并改进。
链接地址: http://www.djcxy.com/p/75943.html