From c0e58c6fb655cee4c25b59b7fb2f61bd864e9cf8 Mon Sep 17 00:00:00 2001 From: kfeagle Date: Sun, 26 Mar 2017 18:09:02 +0800 Subject: [PATCH 1/3] * [ios] bugfix : remove self in boxshadow --- .../Sources/Display/WXComponent+BoxShadow.h | 4 +- .../Sources/Display/WXComponent+BoxShadow.m | 43 ++++++++++--------- .../Sources/Layout/WXComponent+Layout.m | 4 +- ios/sdk/WeexSDK/Sources/Model/WXComponent.m | 2 +- .../Sources/View/WXComponent+ViewManagement.m | 2 +- 5 files changed, 30 insertions(+), 25 deletions(-) diff --git a/ios/sdk/WeexSDK/Sources/Display/WXComponent+BoxShadow.h b/ios/sdk/WeexSDK/Sources/Display/WXComponent+BoxShadow.h index 2c1a645afd..b7ae9eb146 100644 --- a/ios/sdk/WeexSDK/Sources/Display/WXComponent+BoxShadow.h +++ b/ios/sdk/WeexSDK/Sources/Display/WXComponent+BoxShadow.h @@ -28,7 +28,9 @@ * * @param boxShadow the boxshadow will be set * + * @param view the view will be set + * * */ -- (void)configBoxShadow:(WXBoxShadow *_Nullable)boxShadow; +- (void)configBoxShadow:(WXBoxShadow *_Nullable)boxShadow view:(UIView *_Nullable)view; @end diff --git a/ios/sdk/WeexSDK/Sources/Display/WXComponent+BoxShadow.m b/ios/sdk/WeexSDK/Sources/Display/WXComponent+BoxShadow.m index ba9927be6d..cfb54bc385 100644 --- a/ios/sdk/WeexSDK/Sources/Display/WXComponent+BoxShadow.m +++ b/ios/sdk/WeexSDK/Sources/Display/WXComponent+BoxShadow.m @@ -25,15 +25,15 @@ - (WXBoxShadow *_Nullable)getViewBoxShadow:(UIView *_Nullable)view return boxShadow; } -- (void)resetViewLayer +- (void)resetViewLayer:(UIView *_Nullable)view { - UIBezierPath *shadowPath = [UIBezierPath bezierPathWithRect:self.view.bounds]; - self.view.layer.masksToBounds = NO; - self.view.layer.shadowColor = _originalBoxShadow.shadowColor; - self.view.layer.shadowOffset = _originalBoxShadow.shadowOffset; - self.view.layer.shadowRadius = _originalBoxShadow.shadowRadius; - self.view.layer.shadowOpacity = _originalBoxShadow.shadowOpacity; - self.view.layer.shadowPath = shadowPath.CGPath; + UIBezierPath *shadowPath = [UIBezierPath bezierPathWithRect:view.bounds]; + view.layer.masksToBounds = NO; + view.layer.shadowColor = _originalBoxShadow.shadowColor; + view.layer.shadowOffset = _originalBoxShadow.shadowOffset; + view.layer.shadowRadius = _originalBoxShadow.shadowRadius; + view.layer.shadowOpacity = _originalBoxShadow.shadowOpacity; + view.layer.shadowPath = shadowPath.CGPath; if (_lastBoxShadow.isInset) { @@ -58,33 +58,36 @@ - (BOOL)EqualBoxShadow:(WXBoxShadow *_Nullable)boxShadow withBoxShadow:(WXBoxSha } -- (void)configBoxShadow:(WXBoxShadow *_Nullable)boxShadow +- (void)configBoxShadow:(WXBoxShadow *_Nullable)boxShadow view:(UIView *_Nullable)view { + if(!view || ![view isKindOfClass:[UIView class]] || !view.layer) { + return; + } if (!_originalBoxShadow) { - _originalBoxShadow = [self getViewBoxShadow:self.view]; + _originalBoxShadow = [self getViewBoxShadow:view]; } if (!boxShadow && !_lastBoxShadow) { return; } - [self resetViewLayer]; + [self resetViewLayer:view]; if (!boxShadow) { return; } if (boxShadow.isInset) { if (boxShadow.innerLayer) { - boxShadow.innerLayer.frame = self.view.bounds; + boxShadow.innerLayer.frame = view.bounds; if (![boxShadow.innerLayer superlayer] ){ - [self.view.layer addSublayer:boxShadow.innerLayer]; + [view.layer addSublayer:boxShadow.innerLayer]; } } } else { - UIBezierPath *shadowPath = [UIBezierPath bezierPathWithRect:self.view.bounds]; - self.view.layer.masksToBounds = NO; - self.view.layer.shadowColor = boxShadow.shadowColor; - self.view.layer.shadowOffset = boxShadow.shadowOffset; - self.view.layer.shadowRadius = boxShadow.shadowRadius; - self.view.layer.shadowOpacity = boxShadow.shadowOpacity; - self.view.layer.shadowPath = shadowPath.CGPath; + UIBezierPath *shadowPath = [UIBezierPath bezierPathWithRect:view.bounds]; + view.layer.masksToBounds = NO; + view.layer.shadowColor = boxShadow.shadowColor; + view.layer.shadowOffset = boxShadow.shadowOffset; + view.layer.shadowRadius = boxShadow.shadowRadius; + view.layer.shadowOpacity = boxShadow.shadowOpacity; + view.layer.shadowPath = shadowPath.CGPath; } } diff --git a/ios/sdk/WeexSDK/Sources/Layout/WXComponent+Layout.m b/ios/sdk/WeexSDK/Sources/Layout/WXComponent+Layout.m index 92c964b2a8..42a144d601 100644 --- a/ios/sdk/WeexSDK/Sources/Layout/WXComponent+Layout.m +++ b/ios/sdk/WeexSDK/Sources/Layout/WXComponent+Layout.m @@ -120,10 +120,10 @@ - (void)_frameDidCalculated:(BOOL)isChanged if (!CGRectEqualToRect(strongSelf.view.frame,strongSelf.calculatedFrame)) { strongSelf.view.frame = strongSelf.calculatedFrame; - [strongSelf configBoxShadow:_boxShadow]; + [strongSelf configBoxShadow:_boxShadow view:strongSelf.view]; } else { if (![strongSelf EqualBoxShadow:_boxShadow withBoxShadow:_lastBoxShadow]) { - [strongSelf configBoxShadow:_boxShadow]; + [strongSelf configBoxShadow:_boxShadow view:strongSelf.view]; } } diff --git a/ios/sdk/WeexSDK/Sources/Model/WXComponent.m b/ios/sdk/WeexSDK/Sources/Model/WXComponent.m index 560e17ec46..6bdd1b3c76 100644 --- a/ios/sdk/WeexSDK/Sources/Model/WXComponent.m +++ b/ios/sdk/WeexSDK/Sources/Model/WXComponent.m @@ -212,7 +212,7 @@ - (UIView *)view } if (_boxShadow) { - [self configBoxShadow:_boxShadow]; + [self configBoxShadow:_boxShadow view:_view]; } _view.wx_component = self; diff --git a/ios/sdk/WeexSDK/Sources/View/WXComponent+ViewManagement.m b/ios/sdk/WeexSDK/Sources/View/WXComponent+ViewManagement.m index ffc4922b2a..d78e948266 100644 --- a/ios/sdk/WeexSDK/Sources/View/WXComponent+ViewManagement.m +++ b/ios/sdk/WeexSDK/Sources/View/WXComponent+ViewManagement.m @@ -114,7 +114,7 @@ - (void)_updateViewStyles:(NSDictionary *)styles if (styles[@"boxShadow"]) { _lastBoxShadow = _boxShadow; _boxShadow = styles[@"boxShadow"]?[WXConvert WXBoxShadow:styles[@"boxShadow"] scaleFactor:self.weexInstance.pixelScaleFactor]:nil; - [self configBoxShadow:_boxShadow]; + [self configBoxShadow:_boxShadow view:self.view]; [self setNeedsDisplay]; } From 488afe0a2fb69ff2e0a3b224bd0cf2eb4b6b25bc Mon Sep 17 00:00:00 2001 From: kfeagle Date: Sun, 26 Mar 2017 18:22:04 +0800 Subject: [PATCH 2/3] * [ios] box shadow add try catch --- .../Sources/Display/WXComponent+BoxShadow.m | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/ios/sdk/WeexSDK/Sources/Display/WXComponent+BoxShadow.m b/ios/sdk/WeexSDK/Sources/Display/WXComponent+BoxShadow.m index cfb54bc385..4128f5cd3e 100644 --- a/ios/sdk/WeexSDK/Sources/Display/WXComponent+BoxShadow.m +++ b/ios/sdk/WeexSDK/Sources/Display/WXComponent+BoxShadow.m @@ -81,13 +81,20 @@ - (void)configBoxShadow:(WXBoxShadow *_Nullable)boxShadow view:(UIView *_Nullabl } } } else { - UIBezierPath *shadowPath = [UIBezierPath bezierPathWithRect:view.bounds]; - view.layer.masksToBounds = NO; - view.layer.shadowColor = boxShadow.shadowColor; - view.layer.shadowOffset = boxShadow.shadowOffset; - view.layer.shadowRadius = boxShadow.shadowRadius; - view.layer.shadowOpacity = boxShadow.shadowOpacity; - view.layer.shadowPath = shadowPath.CGPath; + @try { + UIBezierPath *shadowPath = [UIBezierPath bezierPathWithRect:view.bounds]; + view.layer.masksToBounds = NO; + view.layer.shadowColor = boxShadow.shadowColor; + view.layer.shadowOffset = boxShadow.shadowOffset; + view.layer.shadowRadius = boxShadow.shadowRadius; + view.layer.shadowOpacity = boxShadow.shadowOpacity; + view.layer.shadowPath = shadowPath.CGPath; + } + @catch (NSException *exception) { + WXLogError(@"WXBoxShadow exception:%@", [exception reason]); + } + + } } From 93df266b003898da9f6372aa77f08fc0b401c874 Mon Sep 17 00:00:00 2001 From: kfeagle Date: Sun, 26 Mar 2017 18:23:45 +0800 Subject: [PATCH 3/3] * [ios] delete blank --- ios/sdk/WeexSDK/Sources/Display/WXComponent+BoxShadow.m | 2 -- 1 file changed, 2 deletions(-) diff --git a/ios/sdk/WeexSDK/Sources/Display/WXComponent+BoxShadow.m b/ios/sdk/WeexSDK/Sources/Display/WXComponent+BoxShadow.m index 4128f5cd3e..d15b69fc9d 100644 --- a/ios/sdk/WeexSDK/Sources/Display/WXComponent+BoxShadow.m +++ b/ios/sdk/WeexSDK/Sources/Display/WXComponent+BoxShadow.m @@ -93,8 +93,6 @@ - (void)configBoxShadow:(WXBoxShadow *_Nullable)boxShadow view:(UIView *_Nullabl @catch (NSException *exception) { WXLogError(@"WXBoxShadow exception:%@", [exception reason]); } - - } }