-
Notifications
You must be signed in to change notification settings - Fork 11
/
CKBlurView.m
96 lines (65 loc) · 2.21 KB
/
CKBlurView.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
//
// CKBlurView.m
// CKBlurView
//
// Created by Conrad Kramer on 10/25/13.
// Copyright (c) 2013 Kramer Software Productions, LLC. All rights reserved.
//
#import <QuartzCore/QuartzCore.h>
#import "CKBlurView.h"
@interface CABackdropLayer : CALayer
@end
@interface CAFilter : NSObject
+ (instancetype)filterWithName:(NSString *)name;
@end
@interface CKBlurView ()
@property (weak, nonatomic) CAFilter *blurFilter;
@end
extern NSString * const kCAFilterGaussianBlur;
NSString * const CKBlurViewQualityDefault = @"default";
NSString * const CKBlurViewQualityLow = @"low";
static NSString * const CKBlurViewQualityKey = @"inputQuality";
static NSString * const CKBlurViewRadiusKey = @"inputRadius";
static NSString * const CKBlurViewBoundsKey = @"inputBounds";
static NSString * const CKBlurViewHardEdgesKey = @"inputHardEdges";
@implementation CKBlurView
+ (Class)layerClass {
return [CABackdropLayer class];
}
- (instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
CAFilter *filter = [CAFilter filterWithName:kCAFilterGaussianBlur];
self.layer.filters = @[ filter ];
self.blurFilter = filter;
self.blurQuality = CKBlurViewQualityDefault;
self.blurRadius = 5.0f;
}
return self;
}
- (void)setQuality:(NSString *)quality {
[self.blurFilter setValue:quality forKey:CKBlurViewQualityKey];
}
- (NSString *)quality {
return [self.blurFilter valueForKey:CKBlurViewQualityKey];
}
- (void)setBlurRadius:(CGFloat)radius {
[self.blurFilter setValue:@(radius) forKey:CKBlurViewRadiusKey];
}
- (CGFloat)blurRadius {
return [[self.blurFilter valueForKey:CKBlurViewRadiusKey] floatValue];
}
- (void)setBlurCroppingRect:(CGRect)croppingRect {
[self.blurFilter setValue:[NSValue valueWithCGRect:croppingRect] forKey:CKBlurViewBoundsKey];
}
- (CGRect)blurCroppingRect {
NSValue *value = [self.blurFilter valueForKey:CKBlurViewBoundsKey];
return value ? [value CGRectValue] : CGRectNull;
}
- (void)setBlurEdges:(BOOL)blurEdges {
[self.blurFilter setValue:@(!blurEdges) forKey:CKBlurViewHardEdgesKey];
}
- (BOOL)blurEdges {
return ![[self.blurFilter valueForKey:CKBlurViewHardEdgesKey] boolValue];
}
@end