From 3b901cae905ea81080d12fb6294c2462bb037de9 Mon Sep 17 00:00:00 2001 From: "pengfei.zhou" Date: Thu, 25 Nov 2021 11:52:20 +0800 Subject: [PATCH] iOS: add AreoEffect --- doric-iOS/Pod/Classes/DoricRegistry.m | 4 +- .../Classes/Shader/DoricAreoEffectViewNode.h | 24 +++++++++ .../Classes/Shader/DoricAreoEffectViewNode.m | 54 +++++++++++++++++++ 3 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 doric-iOS/Pod/Classes/Shader/DoricAreoEffectViewNode.h create mode 100644 doric-iOS/Pod/Classes/Shader/DoricAreoEffectViewNode.m diff --git a/doric-iOS/Pod/Classes/DoricRegistry.m b/doric-iOS/Pod/Classes/DoricRegistry.m index 7ab9ba08..fe23970d 100644 --- a/doric-iOS/Pod/Classes/DoricRegistry.m +++ b/doric-iOS/Pod/Classes/DoricRegistry.m @@ -62,6 +62,7 @@ #import "DoricRemoteResourceLoader.h" #import "DoricCommonBundleResourceLoader.h" #import "DoricBlurEffectViewNode.h" +#import "DoricAreoEffectViewNode.h" @interface DoricRegistry () @@ -134,7 +135,8 @@ - (void)innerRegister { [self registerViewNode:DoricSwitchNode.class withName:@"Switch"]; [self registerViewNode:DoricFlexNode.class withName:@"FlexLayout"]; [self registerViewNode:DoricGestureContainerNode.class withName:@"GestureContainer"]; - [self registerViewNode:DoricBlurEffectViewNode .class withName:@"BlurEffect"]; + [self registerViewNode:DoricBlurEffectViewNode.class withName:@"BlurEffect"]; + [self registerViewNode:DoricAreoEffectViewNode.class withName:@"AreoEffect"]; [self.loaderManager registerLoader:[[DoricBundleResourceLoader alloc] initWithResourceType:@"mainBundle" diff --git a/doric-iOS/Pod/Classes/Shader/DoricAreoEffectViewNode.h b/doric-iOS/Pod/Classes/Shader/DoricAreoEffectViewNode.h new file mode 100644 index 00000000..9a13fbce --- /dev/null +++ b/doric-iOS/Pod/Classes/Shader/DoricAreoEffectViewNode.h @@ -0,0 +1,24 @@ +/* + * Copyright [2021] [Doric.Pub] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// +// Created by pengfei.zhou on 2021/11/24. +// + +#import +#import "DoricStackNode.h" + +@interface DoricAreoEffectViewNode : DoricStackNode +@end \ No newline at end of file diff --git a/doric-iOS/Pod/Classes/Shader/DoricAreoEffectViewNode.m b/doric-iOS/Pod/Classes/Shader/DoricAreoEffectViewNode.m new file mode 100644 index 00000000..4cb747a5 --- /dev/null +++ b/doric-iOS/Pod/Classes/Shader/DoricAreoEffectViewNode.m @@ -0,0 +1,54 @@ +/* + * Copyright [2021] [Doric.Pub] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// +// Created by pengfei.zhou on 2021/11/24. +// + +#import "DoricAreoEffectViewNode.h" + +@interface DoricAreoEffectViewNode () +@property(nonatomic, strong) UIVisualEffectView *visualEffectView; +@end + +@implementation DoricAreoEffectViewNode + +- (UIView *)build { + UIView *ret = [super build]; + UIVisualEffect *endEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight]; + self.visualEffectView = [[UIVisualEffectView alloc] initWithEffect:endEffect]; + [ret addSubview:self.visualEffectView]; + self.visualEffectView.doricLayout.widthSpec = DoricLayoutMost; + self.visualEffectView.doricLayout.heightSpec = DoricLayoutMost; + return ret; +} + +- (void)blendView:(UIView *)view forPropName:(NSString *)name propValue:(id)prop { + if ([name isEqualToString:@"effectiveRect"]) { + NSUInteger x = ((NSNumber *) prop[@"x"]).unsignedIntegerValue; + NSUInteger y = ((NSNumber *) prop[@"y"]).unsignedIntegerValue; + NSUInteger width = ((NSNumber *) prop[@"width"]).unsignedIntegerValue; + NSUInteger height = ((NSNumber *) prop[@"height"]).unsignedIntegerValue; + self.visualEffectView.doricLayout.widthSpec = DoricLayoutJust; + self.visualEffectView.doricLayout.heightSpec = DoricLayoutJust; + self.visualEffectView.doricLayout.width = width; + self.visualEffectView.doricLayout.height = height; + self.visualEffectView.doricLayout.marginLeft = x; + self.visualEffectView.doricLayout.marginTop = y; + } else { + [super blendView:view forPropName:name propValue:prop]; + } +} +@end