From c8f9e7dd33e68743bd58347ca26eea37ea06d994 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=8A=B2=E9=B9=8F?= Date: Thu, 19 Mar 2020 15:07:34 +0800 Subject: [PATCH] iOS: notch plugin implementation --- doric-demo/src/NotchDemo.ts | 8 ++- doric-iOS/Pod/Classes/DoricRegistry.m | 2 + .../Pod/Classes/Plugin/DoricNotchPlugin.h | 24 ++++++++ .../Pod/Classes/Plugin/DoricNotchPlugin.m | 56 +++++++++++++++++++ 4 files changed, 87 insertions(+), 3 deletions(-) create mode 100644 doric-iOS/Pod/Classes/Plugin/DoricNotchPlugin.h create mode 100644 doric-iOS/Pod/Classes/Plugin/DoricNotchPlugin.m diff --git a/doric-demo/src/NotchDemo.ts b/doric-demo/src/NotchDemo.ts index dcd36456..3e0437c1 100644 --- a/doric-demo/src/NotchDemo.ts +++ b/doric-demo/src/NotchDemo.ts @@ -1,4 +1,4 @@ -import { Group, Panel, gravity, Color, LayoutSpec, vlayout, scroller, layoutConfig, IVLayout, IText, notch, modal, Gravity } from "doric"; +import { Group, Panel, gravity, Color, LayoutSpec, vlayout, scroller, layoutConfig, IVLayout, IText, notch, modal, Gravity, log } from "doric"; import { title, label, colors } from "./utils"; @Entry @@ -6,7 +6,7 @@ class NotchDemo extends Panel { build(rootView: Group): void { scroller(vlayout([ title("Notch Demo"), - label('area').apply({ + label('inset').apply({ width: 200, height: 50, backgroundColor: colors[0], @@ -16,7 +16,9 @@ class NotchDemo extends Panel { onClick: () => { notch(context).inset() .then((inset) => { - modal(context).toast("top: " + inset.top + "\n" + "left: " + inset.left + "\n" + "bottom: " + inset.bottom + "\n" + "right: " + inset.right, Gravity.Bottom) + let result = "top: " + inset.top + "\n" + "left: " + inset.left + "\n" + "bottom: " + inset.bottom + "\n" + "right: " + inset.right + modal(context).toast(result, Gravity.Bottom) + log(result) }) .catch(() => { diff --git a/doric-iOS/Pod/Classes/DoricRegistry.m b/doric-iOS/Pod/Classes/DoricRegistry.m index 9b9528d6..cc926181 100644 --- a/doric-iOS/Pod/Classes/DoricRegistry.m +++ b/doric-iOS/Pod/Classes/DoricRegistry.m @@ -51,6 +51,7 @@ #import "DoricUtil.h" #import "DoricCoordinatorPlugin.h" #import "DoricSwitchNode.h" +#import "DoricNotchPlugin.h" @interface DoricLibraries : NSObject @property(nonatomic, strong) NSMutableSet *libraries; @@ -119,6 +120,7 @@ - (void)innerRegister { [self registerNativePlugin:DoricNotificationPlugin.class withName:@"notification"]; [self registerNativePlugin:DoricStatusBarPlugin.class withName:@"statusbar"]; [self registerNativePlugin:DoricCoordinatorPlugin.class withName:@"coordinator"]; + [self registerNativePlugin:DoricNotchPlugin.class withName:@"notch"]; [self registerViewNode:DoricStackNode.class withName:@"Stack"]; [self registerViewNode:DoricVLayoutNode.class withName:@"VLayout"]; diff --git a/doric-iOS/Pod/Classes/Plugin/DoricNotchPlugin.h b/doric-iOS/Pod/Classes/Plugin/DoricNotchPlugin.h new file mode 100644 index 00000000..4e0cb67c --- /dev/null +++ b/doric-iOS/Pod/Classes/Plugin/DoricNotchPlugin.h @@ -0,0 +1,24 @@ +/* + * Copyright [2019] [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 jingpeng.wang on 2020/03/19. +// + +#import +#import "DoricNativePlugin.h" + +@interface DoricNotchPlugin : DoricNativePlugin +@end diff --git a/doric-iOS/Pod/Classes/Plugin/DoricNotchPlugin.m b/doric-iOS/Pod/Classes/Plugin/DoricNotchPlugin.m new file mode 100644 index 00000000..1e20c3f5 --- /dev/null +++ b/doric-iOS/Pod/Classes/Plugin/DoricNotchPlugin.m @@ -0,0 +1,56 @@ +/* + * Copyright [2019] [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 jingpeng.wang on 2020/03/19. +// + +#import "DoricNotchPlugin.h" + +@interface DoricNotchPlugin () +@end + +@implementation DoricNotchPlugin +- (instancetype)initWithContext:(DoricContext *)doricContext { + if (self = [super initWithContext:doricContext]) { + } + return self; +} + +- (void)inset:(NSDictionary *)argument withPromise:(DoricPromise *)promise { + dispatch_async(dispatch_get_main_queue(), ^{ + if (@available(iOS 11.0, *)) { + UIView *superView = [UIApplication sharedApplication].windows.lastObject; + CGFloat top = superView.safeAreaInsets.top; + CGFloat left = superView.safeAreaInsets.left; + CGFloat bottom = superView.safeAreaInsets.bottom; + CGFloat right = superView.safeAreaInsets.right; + [promise resolve:@{ + @"top": @(top), + @"left": @(left), + @"bottom": @(bottom), + @"right": @(right), + }]; + } else { + [promise resolve:@{ + @"top": @(0), + @"left": @(0), + @"bottom": @(0), + @"right": @(0), + }]; + } + }); +} +@end