HWVisualEffectView.m 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  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) UIVisualEffect *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 - public method
  30. - (void)updateBlurEffect:(UIVisualEffect *)effect {
  31. self.blurEffect = effect;
  32. self.effect = self.blurEffect;
  33. }
  34. #pragma mark - private method
  35. - (nullable id)__valueForKey:(NSString *)key {
  36. if (![NSStringFromClass(self.blurEffect.class) isEqualToString:kInternalCustomBlurEffect]) {
  37. return @(0);
  38. }
  39. return [self.blurEffect valueForKey:key];
  40. }
  41. - (void)__setValue:(id)value forKey:(NSString *)key {
  42. if (![NSStringFromClass(self.blurEffect.class) isEqualToString:kInternalCustomBlurEffect]) {
  43. self.effect = self.blurEffect;
  44. return;
  45. }
  46. [self.blurEffect setValue:value forKey:key];
  47. self.effect = self.blurEffect;
  48. }
  49. #pragma mark - Getter & Setter
  50. - (UIVisualEffect *)blurEffect {
  51. if (!_blurEffect) {
  52. if (NSClassFromString(kInternalCustomBlurEffect)) {
  53. _blurEffect = (UIBlurEffect *)[NSClassFromString(@"_UICustomBlurEffect") new];
  54. } else {
  55. _blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
  56. }
  57. }
  58. return _blurEffect;
  59. }
  60. - (UIColor *)colorTint {
  61. return [self __valueForKey:kHWBlurEffectColorTintKey];
  62. }
  63. - (void)setColorTint:(UIColor *)colorTint {
  64. [self __setValue:colorTint forKey:kHWBlurEffectColorTintKey];
  65. }
  66. - (CGFloat)colorTintAlpha {
  67. return ((NSNumber *)[self __valueForKey:kHWBlurEffectColorTintAlphaKey]).floatValue;
  68. }
  69. - (void)setColorTintAlpha:(CGFloat)colorTintAlpha {
  70. [self __setValue:@(colorTintAlpha) forKey:kHWBlurEffectColorTintAlphaKey];
  71. }
  72. - (CGFloat)blurRadius {
  73. return ((NSNumber *)[self __valueForKey:kHWBlurEffectBlurRadiusKey]).floatValue;
  74. }
  75. - (void)setBlurRadius:(CGFloat)blurRadius {
  76. [self __setValue:@(blurRadius) forKey:kHWBlurEffectBlurRadiusKey];
  77. }
  78. - (CGFloat)scale {
  79. return ((NSNumber *)[self __valueForKey:kHWBlurEffectScaleKey]).floatValue;
  80. }
  81. - (void)setScale:(CGFloat)scale {
  82. [self __setValue:@(scale) forKey:kHWBlurEffectScaleKey];
  83. }
  84. @end