66 lines
1.6 KiB
Objective-C
66 lines
1.6 KiB
Objective-C
//
|
|
// We subclass UIBlurEffect so that we can set the BlurAmount.
|
|
// See: http://stackoverflow.com/a/30744777/304706
|
|
//
|
|
|
|
#import "BlurEffectWithAmount.h"
|
|
#import <objc/runtime.h>
|
|
|
|
@interface UIBlurEffect (Protected)
|
|
|
|
@property (nonatomic, readonly) id effectSettings;
|
|
|
|
@end
|
|
|
|
@implementation BlurEffectWithAmount
|
|
@dynamic blurAmount;
|
|
|
|
+ (instancetype)effectWithStyle:(UIBlurEffectStyle)style
|
|
{
|
|
id instance = [super effectWithStyle:style];
|
|
object_setClass(instance, self);
|
|
return instance;
|
|
}
|
|
|
|
+ (instancetype)effectWithStyle:(UIBlurEffectStyle)style andBlurAmount:(NSNumber*)blurAmount
|
|
{
|
|
BlurEffectWithAmount *effect = (BlurEffectWithAmount*)[self effectWithStyle:style];
|
|
effect.blurAmount = blurAmount;
|
|
return effect;
|
|
}
|
|
|
|
- (void)setBlurAmount:(NSNumber*)blurAmount {
|
|
objc_setAssociatedObject(self,
|
|
@selector(blurAmount),
|
|
blurAmount,
|
|
OBJC_ASSOCIATION_RETAIN_NONATOMIC);
|
|
}
|
|
|
|
- (NSNumber*)blurAmount {
|
|
return objc_getAssociatedObject(self, @selector(blurAmount));
|
|
}
|
|
|
|
- (id)effectSettings
|
|
{
|
|
id settings = [super effectSettings];
|
|
NSNumber *blurAmount = self.blurAmount;
|
|
if (blurAmount) {
|
|
[settings setValue:blurAmount forKey:@"blurRadius"];
|
|
}
|
|
return settings;
|
|
}
|
|
|
|
- (id)copyWithZone:(NSZone*)zone
|
|
{
|
|
id instance = [super copyWithZone:zone];
|
|
object_setClass(instance, [self class]);
|
|
// Must also copy blur amount to new instance
|
|
objc_setAssociatedObject(instance,
|
|
@selector(blurAmount),
|
|
self.blurAmount,
|
|
OBJC_ASSOCIATION_RETAIN_NONATOMIC);
|
|
return instance;
|
|
}
|
|
|
|
@end
|