HWVisualEffectView.m 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. //
  2. // HWVisualEffectView.m
  3. // HWPanModal
  4. //
  5. // Created by heath wang on 2019/6/14.
  6. //
  7. #import "HWVisualEffectView.h"
  8. NSString * const kInternalCustomBlurEffect = @"_UICustomBlurEffect";
  9. NSString * const kHWBlurEffectColorTintKey = @"colorTint";
  10. NSString * const kHWBlurEffectColorTintAlphaKey = @"colorTintAlpha";
  11. NSString * const kHWBlurEffectBlurRadiusKey = @"blurRadius";
  12. NSString * const kHWBlurEffectScaleKey = @"scale";
  13. @interface HWVisualEffectView ()
  14. @property (nonatomic, strong) UIBlurEffect *blurEffect;
  15. @end
  16. @implementation HWVisualEffectView
  17. @synthesize colorTint = _colorTint;
  18. @synthesize colorTintAlpha = _colorTintAlpha;
  19. @synthesize blurRadius = _blurRadius;
  20. @synthesize scale = _scale;
  21. #pragma mark - init
  22. - (instancetype)initWithEffect:(UIVisualEffect *)effect {
  23. self = [super initWithEffect:effect];
  24. if (self) {
  25. self.scale = 1;
  26. }
  27. return self;
  28. }
  29. #pragma mark - private method
  30. - (nullable id)__valueForKey:(NSString *)key {
  31. if (![NSStringFromClass(self.blurEffect.class) isEqualToString:kInternalCustomBlurEffect]) {
  32. return @(0);
  33. }
  34. return [self.blurEffect valueForKey:key];
  35. }
  36. - (void)__setValue:(id)value forKey:(NSString *)key {
  37. if (![NSStringFromClass(self.blurEffect.class) isEqualToString:kInternalCustomBlurEffect]) {
  38. self.effect = self.blurEffect;
  39. return;
  40. }
  41. [self.blurEffect setValue:value forKey:key];
  42. self.effect = self.blurEffect;
  43. }
  44. #pragma mark - Getter & Setter
  45. - (UIBlurEffect *)blurEffect {
  46. if (!_blurEffect) {
  47. if (NSClassFromString(kInternalCustomBlurEffect)) {
  48. _blurEffect = (UIBlurEffect *)[NSClassFromString(@"_UICustomBlurEffect") new];
  49. } else {
  50. _blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
  51. }
  52. }
  53. return _blurEffect;
  54. }
  55. - (UIColor *)colorTint {
  56. return [self __valueForKey:kHWBlurEffectColorTintKey];
  57. }
  58. - (void)setColorTint:(UIColor *)colorTint {
  59. [self __setValue:colorTint forKey:kHWBlurEffectColorTintKey];
  60. }
  61. - (CGFloat)colorTintAlpha {
  62. return ((NSNumber *)[self __valueForKey:kHWBlurEffectColorTintAlphaKey]).floatValue;
  63. }
  64. - (void)setColorTintAlpha:(CGFloat)colorTintAlpha {
  65. [self __setValue:@(colorTintAlpha) forKey:kHWBlurEffectColorTintAlphaKey];
  66. }
  67. - (CGFloat)blurRadius {
  68. return ((NSNumber *)[self __valueForKey:kHWBlurEffectBlurRadiusKey]).floatValue;
  69. }
  70. - (void)setBlurRadius:(CGFloat)blurRadius {
  71. [self __setValue:@(blurRadius) forKey:kHWBlurEffectBlurRadiusKey];
  72. }
  73. - (CGFloat)scale {
  74. return ((NSNumber *)[self __valueForKey:kHWBlurEffectScaleKey]).floatValue;
  75. }
  76. - (void)setScale:(CGFloat)scale {
  77. [self __setValue:@(scale) forKey:kHWBlurEffectScaleKey];
  78. }
  79. @end