From 6b4213655dcc0e879997de88e06f7d56a9b37778 Mon Sep 17 00:00:00 2001 From: acton393 Date: Fri, 14 Apr 2017 15:04:23 +0800 Subject: [PATCH 1/3] * [ios] bugfix gradient layer --- ios/sdk/WeexSDK/Sources/Component/WXComponent_internal.h | 1 + ios/sdk/WeexSDK/Sources/Model/WXComponent.m | 7 +++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/ios/sdk/WeexSDK/Sources/Component/WXComponent_internal.h b/ios/sdk/WeexSDK/Sources/Component/WXComponent_internal.h index f548ff9832..07a175300e 100644 --- a/ios/sdk/WeexSDK/Sources/Component/WXComponent_internal.h +++ b/ios/sdk/WeexSDK/Sources/Component/WXComponent_internal.h @@ -47,6 +47,7 @@ */ UIColor *_backgroundColor; NSString *_backgroundImage; + CAGradientLayer * _gradientLayer; WXClipType _clipToBounds; UIView *_view; CGFloat _opacity; diff --git a/ios/sdk/WeexSDK/Sources/Model/WXComponent.m b/ios/sdk/WeexSDK/Sources/Model/WXComponent.m index 97125ae2c6..a017011374 100644 --- a/ios/sdk/WeexSDK/Sources/Model/WXComponent.m +++ b/ios/sdk/WeexSDK/Sources/Model/WXComponent.m @@ -491,8 +491,11 @@ - (void)setGradientLayer if(strongSelf) { UIColor * startColor = (UIColor*)linearGradient[@"startColor"]; UIColor * endColor = (UIColor*)linearGradient[@"endColor"]; - CAGradientLayer * gradientLayer = [WXUtility gradientLayerFromColors:@[startColor, endColor] locations:nil frame:strongSelf.view.bounds gradientType:[linearGradient[@"gradientType"] integerValue]]; - [strongSelf.view.layer insertSublayer:gradientLayer atIndex:0]; + if ([strongSelf.view.layer.sublayers containsObject:_gradientLayer]) { + [_gradientLayer removeFromSuperlayer]; + } + _gradientLayer = [WXUtility gradientLayerFromColors:@[startColor, endColor] locations:nil frame:strongSelf.view.bounds gradientType:[linearGradient[@"gradientType"] integerValue]]; + [strongSelf.view.layer insertSublayer:_gradientLayer atIndex:0]; strongSelf.view.layer.masksToBounds = YES; } }); From af14f2a84e7cbe76ad120f30c407a5329b73d944 Mon Sep 17 00:00:00 2001 From: acton393 Date: Fri, 14 Apr 2017 15:12:00 +0800 Subject: [PATCH 2/3] * [ios] protect nil value --- ios/sdk/WeexSDK/Sources/Model/WXComponent.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ios/sdk/WeexSDK/Sources/Model/WXComponent.m b/ios/sdk/WeexSDK/Sources/Model/WXComponent.m index a017011374..c90d499a7d 100644 --- a/ios/sdk/WeexSDK/Sources/Model/WXComponent.m +++ b/ios/sdk/WeexSDK/Sources/Model/WXComponent.m @@ -491,7 +491,7 @@ - (void)setGradientLayer if(strongSelf) { UIColor * startColor = (UIColor*)linearGradient[@"startColor"]; UIColor * endColor = (UIColor*)linearGradient[@"endColor"]; - if ([strongSelf.view.layer.sublayers containsObject:_gradientLayer]) { + if (_gradientLayer && [strongSelf.view.layer.sublayers containsObject:_gradientLayer]) { [_gradientLayer removeFromSuperlayer]; } _gradientLayer = [WXUtility gradientLayerFromColors:@[startColor, endColor] locations:nil frame:strongSelf.view.bounds gradientType:[linearGradient[@"gradientType"] integerValue]]; From 413933744286995e998cb549b857995f0826bb41 Mon Sep 17 00:00:00 2001 From: acton393 Date: Fri, 14 Apr 2017 15:19:28 +0800 Subject: [PATCH 3/3] * [ios] set nil when view unload --- ios/sdk/WeexSDK/Sources/View/WXComponent+ViewManagement.m | 1 + 1 file changed, 1 insertion(+) diff --git a/ios/sdk/WeexSDK/Sources/View/WXComponent+ViewManagement.m b/ios/sdk/WeexSDK/Sources/View/WXComponent+ViewManagement.m index 73296b4835..55e76b01de 100644 --- a/ios/sdk/WeexSDK/Sources/View/WXComponent+ViewManagement.m +++ b/ios/sdk/WeexSDK/Sources/View/WXComponent+ViewManagement.m @@ -236,6 +236,7 @@ - (void)_unloadViewWithReusing:(BOOL)isReusing _view = nil; [_layer removeFromSuperlayer]; _layer = nil; + _gradientLayer = nil; [self viewDidUnload]; }