Skip to content
This repository was archived by the owner on Jun 3, 2021. It is now read-only.

Commit 97eda0b

Browse files
authored
Merge pull request #1789 from wqyfavor/fix-rc-20
Fix rc 20
2 parents 0b6cfec + 5702b65 commit 97eda0b

File tree

15 files changed

+254
-38
lines changed

15 files changed

+254
-38
lines changed

ios/sdk/WeexSDK/Sources/Component/WXCycleSliderComponent.mm

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,9 @@ - (id)initWithFrame:(CGRect)frame
7373
_currentIndex = 0;
7474
_itemViews = [[NSMutableArray alloc] init];
7575
_scrollView = [[WXRecycleSliderScrollView alloc] init];
76+
if (@available(iOS 11.0, *)) {
77+
_scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
78+
}
7679
_scrollView.backgroundColor = [UIColor clearColor];
7780
_scrollView.delegate = self;
7881
_scrollView.showsHorizontalScrollIndicator = NO;

ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.mm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -903,7 +903,7 @@ - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL
903903
}
904904
if (!decelerate) {
905905
_isScrolling = NO;
906-
[self performSelector:@selector(scrollViewDidEndDecelerating:) withObject:nil afterDelay:0.1];
906+
[self performSelector:@selector(scrollViewDidEndDecelerating:) withObject:scrollView afterDelay:0.1];
907907
}
908908

909909
NSHashTable *delegates = [_delegates copy];

ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.h

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,20 @@
8282
*/
8383
+ (void)registerService:(NSString *)name withScript:(NSString *)serviceScript withOptions:(NSDictionary *)options;
8484

85+
/**
86+
* @abstract Registers a component for a given name, options and js code
87+
*
88+
* @param name The service name to register
89+
*
90+
* @param options The service options to register
91+
*
92+
* @param serviceScript service js code to invoke
93+
*
94+
* @param completion Completion callback. JS is executed in asynchronously.
95+
*
96+
*/
97+
+ (void)registerService:(NSString *)name withScript:(NSString *)serviceScript withOptions:(NSDictionary *)options completion:(void(^)(BOOL result))completion;
98+
8599
/**
86100
* @abstract Registers a component for a given name, options and js url
87101
*
@@ -92,7 +106,21 @@
92106
* @param serviceScriptUrl The service url to register
93107
*
94108
*/
95-
+ (void)registerService:(NSString *)name withScriptUrl:(NSURL *)serviceScriptUrl WithOptions:(NSDictionary *)options;
109+
+ (void)registerService:(NSString *)name withScriptUrl:(NSURL *)serviceScriptUrl withOptions:(NSDictionary *)options;
110+
111+
/**
112+
* @abstract Registers a component for a given name, options and js url
113+
*
114+
* @param name The service name to register
115+
*
116+
* @param options The service options to register
117+
*
118+
* @param serviceScriptUrl The service url to register
119+
*
120+
* @param completion Completion callback. JS is executed in asynchronously.
121+
*
122+
*/
123+
+ (void)registerService:(NSString *)name withScriptUrl:(NSURL *)serviceScriptUrl withOptions:(NSDictionary *)options completion:(void(^)(BOOL result))completion;
96124

97125
/**
98126
* @abstract Registers a component for a given name, options and js code

ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.m

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -166,14 +166,25 @@ + (void)registerComponent:(NSString *)name withClass:(Class)clazz withProperties
166166

167167

168168
# pragma mark Service Register
169+
169170
+ (void)registerService:(NSString *)name withScript:(NSString *)serviceScript withOptions:(NSDictionary *)options
170171
{
171-
[[WXSDKManager bridgeMgr] registerService:name withService:serviceScript withOptions:options];
172+
[[WXSDKManager bridgeMgr] registerService:name withService:serviceScript withOptions:options completion:nil];
173+
}
174+
175+
+ (void)registerService:(NSString *)name withScript:(NSString *)serviceScript withOptions:(NSDictionary *)options completion:(void(^)(BOOL result))completion
176+
{
177+
[[WXSDKManager bridgeMgr] registerService:name withService:serviceScript withOptions:options completion:completion];
178+
}
179+
180+
+ (void)registerService:(NSString *)name withScriptUrl:(NSURL *)serviceScriptUrl withOptions:(NSDictionary *)options
181+
{
182+
[[WXSDKManager bridgeMgr] registerService:name withServiceUrl:serviceScriptUrl withOptions:options completion:nil];
172183
}
173184

174-
+ (void)registerService:(NSString *)name withScriptUrl:(NSURL *)serviceScriptUrl WithOptions:(NSDictionary *)options
185+
+ (void)registerService:(NSString *)name withScriptUrl:(NSURL *)serviceScriptUrl withOptions:(NSDictionary *)options completion:(void(^)(BOOL result))completion
175186
{
176-
[[WXSDKManager bridgeMgr] registerService:name withServiceUrl:serviceScriptUrl withOptions:options];
187+
[[WXSDKManager bridgeMgr] registerService:name withServiceUrl:serviceScriptUrl withOptions:options completion:completion];
177188
}
178189

179190
+ (void)unregisterService:(NSString *)name

ios/sdk/WeexSDK/Sources/Layout/WXComponent+Layout.h

Lines changed: 71 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,33 @@
2626
#ifdef __cplusplus
2727
#include "layout.h"
2828

29+
typedef WeexCore::WXCoreFlexDirection WXCoreFlexDirection;
30+
typedef WeexCore::WXCoreFlexWrap WXCoreFlexWrap;
31+
typedef WeexCore::WXCoreJustifyContent WXCoreJustifyContent;
32+
typedef WeexCore::WXCoreAlignItems WXCoreAlignItems;
33+
typedef WeexCore::WXCoreAlignSelf WXCoreAlignSelf;
34+
typedef WeexCore::WXCorePositionType WXCorePositionType;
35+
2936
extern "C" {
3037
#endif
3138
bool flexIsUndefined(float value);
3239
#ifdef __cplusplus
3340
}
3441
#endif
3542

43+
#ifndef __cplusplus
44+
// Ensure that .m files can use css style enum definitions.
45+
#include "flex_enum.h"
46+
47+
typedef enum WXCoreFlexDirection WXCoreFlexDirection;
48+
typedef enum WXCoreFlexWrap WXCoreFlexWrap;
49+
typedef enum WXCoreJustifyContent WXCoreJustifyContent;
50+
typedef enum WXCoreAlignItems WXCoreAlignItems;
51+
typedef enum WXCoreAlignSelf WXCoreAlignSelf;
52+
typedef enum WXCorePositionType WXCorePositionType;
53+
54+
#endif
55+
3656
@interface WXComponent ()
3757
{
3858
@package
@@ -51,9 +71,59 @@ extern "C" {
5171
* @warning Subclasses must not override this.
5272
*/
5373
#ifdef __cplusplus
54-
@property(nonatomic, readonly, assign) WeexCore::WXCoreLayoutNode *flexCssNode;
74+
@property (nonatomic, readonly, assign) WeexCore::WXCoreLayoutNode *flexCssNode;
5575
#endif
5676

77+
/**
78+
* @abstract Get css style value for key. The key should be of CSS standard form.
79+
* This method is for convenience use in C/ObjC environment. And if you want to
80+
* retrieve all style values or in C++, you could use flexCssNode directly.
81+
*
82+
* Thread usage:
83+
* This method should be invoked in component thread by WXPerformBlockOnComponentThread.
84+
* Note that all initWithRef methods of WXComponent and its subclasses are performed in
85+
* component thread by default. Therefore you can call this method directly in initWithRef.
86+
*
87+
* Supported keys:
88+
* width, height, min-width, min-height, max-width, max-height,
89+
* margin-(left/right/top/bottom)
90+
* padding-(left/right/top/bottom)
91+
* border-(left/right/top/bottom)-width
92+
* left, right, top, bottom
93+
* flex-grow
94+
*/
95+
- (float)getCssStyleValueForKey:(NSString *)key;
96+
97+
/**
98+
* @abstract Get css style flex-direction. Thread usage the same as getCssStyleValueForKey.
99+
*/
100+
- (WXCoreFlexDirection)getCssStyleFlexDirection;
101+
102+
/**
103+
* @abstract Get css style flex-wrap. Thread usage the same as getCssStyleValueForKey.
104+
*/
105+
- (WXCoreFlexWrap)getCssStyleFlexWrap;
106+
107+
/**
108+
* @abstract Get css style justify-content. Thread usage the same as getCssStyleValueForKey.
109+
*/
110+
- (WXCoreJustifyContent)getCssStyleJustifyContent;
111+
112+
/**
113+
* @abstract Get css style align-items. Thread usage the same as getCssStyleValueForKey.
114+
*/
115+
- (WXCoreAlignItems)getCssStyleAlignItems;
116+
117+
/**
118+
* @abstract Get css style align-self. Thread usage the same as getCssStyleValueForKey.
119+
*/
120+
- (WXCoreAlignSelf)getCssStyleAlignSelf;
121+
122+
/**
123+
* @abstract Get css style position. Thread usage the same as getCssStyleValueForKey.
124+
*/
125+
- (WXCorePositionType)getCssStylePositionType;
126+
57127
/**
58128
* @abstract Convert layout dimension value like 'left', 'width' to style value in js considering viewport and scale.
59129
*/

ios/sdk/WeexSDK/Sources/Layout/WXComponent+Layout.mm

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -366,6 +366,86 @@ - (CGFloat)judgePropValuePropValue:(id)propValue defaultValue:(CGFloat)defaultVa
366366
return defaultValue;
367367
}
368368

369+
- (float)getCssStyleValueForKey:(NSString *)key
370+
{
371+
/*
372+
* width, height, min-width, min-height, max-width, max-height,
373+
* margin-(left/right/top/bottom)
374+
* padding-(left/right/top/bottom)
375+
* border-(left/right/top/bottom)-width
376+
* left, right, top, bottom
377+
* flex-grow
378+
*/
379+
WXAssert(_flexCssNode != nullptr, @"Css node is null.");
380+
if (_flexCssNode == nullptr) {
381+
return NAN;
382+
}
383+
384+
std::string ckey = [key UTF8String];
385+
if (ckey == "width") return _flexCssNode->getStyleWidth();
386+
if (ckey == "height") return _flexCssNode->getStyleHeight();
387+
if (ckey == "min-width") return _flexCssNode->getMinWidth();
388+
if (ckey == "min-height") return _flexCssNode->getMinHeight();
389+
if (ckey == "max-width") return _flexCssNode->getMaxWidth();
390+
if (ckey == "max-height") return _flexCssNode->getMaxHeight();
391+
if (ckey == "margin-left") return _flexCssNode->getMarginLeft();
392+
if (ckey == "margin-right") return _flexCssNode->getMarginRight();
393+
if (ckey == "margin-top") return _flexCssNode->getMarginTop();
394+
if (ckey == "margin-bottom") return _flexCssNode->getMarginBottom();
395+
if (ckey == "padding-left") return _flexCssNode->getPaddingLeft();
396+
if (ckey == "padding-right") return _flexCssNode->getPaddingRight();
397+
if (ckey == "padding-top") return _flexCssNode->getPaddingTop();
398+
if (ckey == "padding-bottom") return _flexCssNode->getPaddingBottom();
399+
if (ckey == "border-left-width") return _flexCssNode->getBorderWidthLeft();
400+
if (ckey == "border-right-width") return _flexCssNode->getBorderWidthRight();
401+
if (ckey == "border-top-width") return _flexCssNode->getBorderWidthTop();
402+
if (ckey == "border-bottom-width") return _flexCssNode->getBorderWidthBottom();
403+
if (ckey == "left") return _flexCssNode->getStylePositionLeft();
404+
if (ckey == "right") return _flexCssNode->getStylePositionRight();
405+
if (ckey == "top") return _flexCssNode->getStylePositionTop();
406+
if (ckey == "bottom") return _flexCssNode->getStylePositionBottom();
407+
if (ckey == "flex-grow") return _flexCssNode->getFlex();
408+
409+
WXAssert(NO, @"Invalid css style key %@", key);
410+
return NAN;
411+
}
412+
413+
- (WXCoreFlexDirection)getCssStyleFlexDirection
414+
{
415+
WXAssert(_flexCssNode != nullptr, @"Css node is null.");
416+
return _flexCssNode ? _flexCssNode->getFlexDirection() : kFlexDirectionColumn;
417+
}
418+
419+
- (WXCoreFlexWrap)getCssStyleFlexWrap
420+
{
421+
WXAssert(_flexCssNode != nullptr, @"Css node is null.");
422+
return _flexCssNode ? _flexCssNode->getFlexWrap() : kNoWrap;
423+
}
424+
425+
- (WXCoreJustifyContent)getCssStyleJustifyContent
426+
{
427+
WXAssert(_flexCssNode != nullptr, @"Css node is null.");
428+
return _flexCssNode ? _flexCssNode->getJustifyContent() : kJustifyFlexStart;
429+
}
430+
431+
- (WXCoreAlignItems)getCssStyleAlignItems
432+
{
433+
WXAssert(_flexCssNode != nullptr, @"Css node is null.");
434+
return _flexCssNode ? _flexCssNode->getAlignItems() : kAlignItemsStretch;
435+
}
436+
437+
- (WXCoreAlignSelf)getCssStyleAlignSelf
438+
{
439+
WXAssert(_flexCssNode != nullptr, @"Css node is null.");
440+
return _flexCssNode ? _flexCssNode->getAlignSelf() : kAlignSelfAuto;
441+
}
442+
443+
- (WXCorePositionType)getCssStylePositionType
444+
{
445+
WXAssert(_flexCssNode != nullptr, @"Css node is null.");
446+
return _flexCssNode ? _flexCssNode->getStylePositionType() : kRelative;
447+
}
448+
369449
- (NSString*)convertLayoutValueToStyleValue:(NSString*)valueName
370450
{
371451
if (_flexCssNode == nullptr) {

ios/sdk/WeexSDK/Sources/Manager/WXBridgeManager.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,18 +102,19 @@ extern void WXPerformBlockOnBridgeThread(void (^block)(void));
102102
* @param name : service name
103103
* @param serviceScript : script code
104104
* @param options : service options
105+
* @param completion : completion callback
105106
**/
106-
- (void)registerService:(NSString *)name withService:(NSString *)serviceScript withOptions:(NSDictionary *)options;
107+
- (void)registerService:(NSString *)name withService:(NSString *)serviceScript withOptions:(NSDictionary *)options completion:(void(^)(BOOL result))completion;
107108

108109

109110
/**
110111
* Register JS service Script
111112
* @param name : service name
112113
* @param serviceScriptUrl : script url
113114
* @param options : service options
115+
* @param completion : completion callback
114116
**/
115-
116-
-(void)registerService:(NSString *)name withServiceUrl:(NSURL *)serviceScriptUrl withOptions:(NSDictionary *)options;
117+
-(void)registerService:(NSString *)name withServiceUrl:(NSURL *)serviceScriptUrl withOptions:(NSDictionary *)options completion:(void(^)(BOOL result))completion;
117118

118119
/**
119120
* Unregister JS service Script

ios/sdk/WeexSDK/Sources/Manager/WXBridgeManager.m

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -288,28 +288,41 @@ - (JSValue *)callJSMethodWithResult:(WXCallJSMethod *)method
288288
return value;
289289
}
290290

291-
-(void)registerService:(NSString *)name withServiceUrl:(NSURL *)serviceScriptUrl withOptions:(NSDictionary *)options
291+
- (void)registerService:(NSString *)name withServiceUrl:(NSURL *)serviceScriptUrl withOptions:(NSDictionary *)options completion:(void(^)(BOOL result))completion
292292
{
293-
if (!name || !serviceScriptUrl || !options) return;
293+
if (!name || !serviceScriptUrl || !options) {
294+
if (completion) {
295+
completion(NO);
296+
}
297+
return;
298+
}
294299
__weak typeof(self) weakSelf = self;
295300
WXResourceRequest *request = [WXResourceRequest requestWithURL:serviceScriptUrl resourceType:WXResourceTypeServiceBundle referrer:@"" cachePolicy:NSURLRequestUseProtocolCachePolicy];
296301
WXResourceLoader *serviceBundleLoader = [[WXResourceLoader alloc] initWithRequest:request];;
297302
serviceBundleLoader.onFinished = ^(WXResourceResponse *response, NSData *data) {
298303
__strong typeof(weakSelf) strongSelf = weakSelf;
299304
NSString *jsServiceString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
300-
[strongSelf registerService:name withService:jsServiceString withOptions:options];
305+
[strongSelf registerService:name withService:jsServiceString withOptions:options completion:completion];
301306
};
302307

303308
serviceBundleLoader.onFailed = ^(NSError *loadError) {
304309
WXLogError(@"No script URL found");
310+
if (completion) {
311+
completion(NO);
312+
}
305313
};
306314

307315
[serviceBundleLoader start];
308316
}
309317

310-
- (void)registerService:(NSString *)name withService:(NSString *)serviceScript withOptions:(NSDictionary *)options
318+
- (void)registerService:(NSString *)name withService:(NSString *)serviceScript withOptions:(NSDictionary *)options completion:(void(^)(BOOL result))completion
311319
{
312-
if (!name || !serviceScript || !options) return;
320+
if (!name || !serviceScript || !options) {
321+
if (completion) {
322+
completion(NO);
323+
}
324+
return;
325+
}
313326

314327
NSString *script = [WXServiceFactory registerServiceScript:name withRawScript:serviceScript withOptions:options];
315328

@@ -318,6 +331,9 @@ - (void)registerService:(NSString *)name withService:(NSString *)serviceScript w
318331
// save it when execute
319332
[WXDebugTool cacheJsService:name withScript:serviceScript withOptions:options];
320333
[weakSelf.bridgeCtx executeJsService:script withName:name];
334+
if (completion) {
335+
completion(YES);
336+
}
321337
});
322338
}
323339

ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,6 @@ @implementation WXSDKInstance
7878
BOOL _debugJS;
7979
id<WXBridgeProtocol> _instanceJavaScriptContext; // sandbox javaScript context
8080
CGFloat _defaultPixelScaleFactor;
81-
BOOL _bReleaseInstanceInMainThread;
8281
BOOL _defaultDataRender;
8382
}
8483

@@ -118,7 +117,6 @@ - (instancetype)init
118117
_apmInstance = [[WXApmForInstance alloc] init];
119118

120119
_defaultPixelScaleFactor = CGFLOAT_MIN;
121-
_bReleaseInstanceInMainThread = YES;
122120
_defaultDataRender = NO;
123121

124122
[self addObservers];
@@ -443,9 +441,6 @@ - (BOOL)_handleConfigCenter
443441

444442
BOOL useJSCApiForCreateInstance = [[configCenter configForKey:@"iOS_weex_ext_config.useJSCApiForCreateInstance" defaultValue:@(YES) isDefault:NULL] boolValue];
445443
[WXUtility setUseJSCApiForCreateInstance:useJSCApiForCreateInstance];
446-
447-
//Reading config from orange for Release instance in Main Thread or not
448-
_bReleaseInstanceInMainThread = [[configCenter configForKey:@"iOS_weex_ext_config.releaseInstanceInMainThread" defaultValue:@(YES) isDefault:nil] boolValue];
449444

450445
BOOL shoudMultiContext = NO;
451446
shoudMultiContext = [[configCenter configForKey:@"iOS_weex_ext_config.createInstanceUsingMutliContext" defaultValue:@(YES) isDefault:NULL] boolValue];
@@ -659,13 +654,9 @@ - (void)destroyInstance
659654
[WXCoreBridge closePage:instanceId];
660655

661656
// Reading config from orange for Release instance in Main Thread or not, for Bug #15172691 +{
662-
if (!_bReleaseInstanceInMainThread) {
657+
dispatch_async(dispatch_get_main_queue(), ^{
663658
[WXSDKManager removeInstanceforID:instanceId];
664-
} else {
665-
dispatch_async(dispatch_get_main_queue(), ^{
666-
[WXSDKManager removeInstanceforID:instanceId];
667-
});
668-
}
659+
});
669660
//+}
670661
});
671662

0 commit comments

Comments
 (0)