You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@weex.apache.org by so...@apache.org on 2017/02/28 02:30:10 UTC
[30/50] incubator-weex git commit: + [ios] box-shadow:add reset and
compare with last boxshadow
+ [ios] box-shadow:add reset and compare with last boxshadow
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/936a7a77
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/936a7a77
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/936a7a77
Branch: refs/heads/0.11-dev
Commit: 936a7a77afbecb01ef6c0029f4d11a5095a09154
Parents: d543d44
Author: \u9f50\u5c71 <su...@163.com>
Authored: Thu Feb 23 20:18:11 2017 +0800
Committer: \u9f50\u5c71 <su...@163.com>
Committed: Thu Feb 23 20:18:11 2017 +0800
----------------------------------------------------------------------
.../Sources/Component/WXComponent_internal.h | 2 +
.../WeexSDK/Sources/Layout/WXComponent+Layout.m | 3 +
ios/sdk/WeexSDK/Sources/Model/WXComponent.m | 10 +++-
ios/sdk/WeexSDK/Sources/Utility/WXBoxShadow.h | 44 +++++++++++++-
ios/sdk/WeexSDK/Sources/Utility/WXBoxShadow.m | 61 +++++++++++++++++---
ios/sdk/WeexSDK/Sources/Utility/WXConvert.h | 2 +-
ios/sdk/WeexSDK/Sources/Utility/WXConvert.m | 4 +-
.../Sources/View/WXComponent+ViewManagement.m | 13 ++++-
8 files changed, 121 insertions(+), 18 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/936a7a77/ios/sdk/WeexSDK/Sources/Component/WXComponent_internal.h
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXComponent_internal.h b/ios/sdk/WeexSDK/Sources/Component/WXComponent_internal.h
index daa404c..fdd1802 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXComponent_internal.h
+++ b/ios/sdk/WeexSDK/Sources/Component/WXComponent_internal.h
@@ -40,6 +40,8 @@
UIView *_view;
CGFloat _opacity;
WXVisibility _visibility;
+ WXBoxShadow *_originalBoxShadow;
+ WXBoxShadow *_lastBoxShadow;
WXBoxShadow *_boxShadow;
/**
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/936a7a77/ios/sdk/WeexSDK/Sources/Layout/WXComponent+Layout.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Layout/WXComponent+Layout.m b/ios/sdk/WeexSDK/Sources/Layout/WXComponent+Layout.m
index bd6feca..d457733 100644
--- a/ios/sdk/WeexSDK/Sources/Layout/WXComponent+Layout.m
+++ b/ios/sdk/WeexSDK/Sources/Layout/WXComponent+Layout.m
@@ -117,6 +117,9 @@
}
strongSelf.view.frame = strongSelf.calculatedFrame;
+ if (![WXBoxShadow EqualBoxShadow:_boxShadow withBoxShadow:_lastBoxShadow]) {
+ [WXBoxShadow configViewLayer:strongSelf.view boxShadow:_boxShadow lastBoxShadow:_lastBoxShadow originalBoxShadow:_originalBoxShadow];
+ }
if (strongSelf->_transform) {
[strongSelf->_transform applyTransformForView:strongSelf.view];
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/936a7a77/ios/sdk/WeexSDK/Sources/Model/WXComponent.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Model/WXComponent.m b/ios/sdk/WeexSDK/Sources/Model/WXComponent.m
index 383366a..126754c 100644
--- a/ios/sdk/WeexSDK/Sources/Model/WXComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Model/WXComponent.m
@@ -201,9 +201,8 @@
[self _resetNativeBorderRadius];
_layer.opacity = _opacity;
_view.backgroundColor = _backgroundColor;
- [WXBoxShadow configLayer:self.view boxShadow:_boxShadow];
}
-
+
if (_backgroundImage) {
[self setGradientLayer];
}
@@ -212,6 +211,11 @@
[_transform applyTransformForView:_view];
}
+ if (_boxShadow) {
+ _originalBoxShadow = [WXBoxShadow getViewBoxShadow:self.view];
+ [WXBoxShadow configViewLayer:self.view boxShadow:_boxShadow lastBoxShadow:_lastBoxShadow originalBoxShadow:_originalBoxShadow];
+ }
+
_view.wx_component = self;
_view.wx_ref = self.ref;
_layer.wx_component = self;
@@ -233,7 +237,7 @@
if (_lazyCreateView) {
[self _buildViewHierarchyLazily];
}
-
+
[self _handleFirstScreenTime];
return _view;
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/936a7a77/ios/sdk/WeexSDK/Sources/Utility/WXBoxShadow.h
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Utility/WXBoxShadow.h b/ios/sdk/WeexSDK/Sources/Utility/WXBoxShadow.h
index 9f8ba62..1d215d5 100644
--- a/ios/sdk/WeexSDK/Sources/Utility/WXBoxShadow.h
+++ b/ios/sdk/WeexSDK/Sources/Utility/WXBoxShadow.h
@@ -18,6 +18,46 @@
@property (nonatomic, strong, nullable)WXInnerLayer *innerLayer;
@property CGFloat shadowOpacity;
-+(void)configLayer:(UIView *_Nullable)view boxShadow:(WXBoxShadow *_Nullable)boxShadow;
-+(WXBoxShadow *_Nullable)getBoxShadowFromString:(NSString *_Nullable)string;
+/**
+ * @abstract get boxshadow from view
+ *
+ * @param view
+ *
+ * @return A WXBoxShadow object
+ */
++(WXBoxShadow *)getViewBoxShadow:(UIView *_Nullable)view;
+
+/**
+ * @abstract compare boxshadow
+ *
+ * @param boxShadow
+ *
+ * @param view
+ *
+ * @return if not equal return NO, if equal return YES
+ */
++(BOOL)EqualBoxShadow:(WXBoxShadow *_Nullable)boxShadow withBoxShadow:(WXBoxShadow *_Nullable)compareBoxShadow;
+
+/**
+ * @abstract config view Layer with boxshadow, lastboxshadow and originalBoxShadow
+ *
+ * @param boxShadow the boxshadow will be set
+ *
+ * @param lastboxshadow the boxshadow set last time
+ *
+ * @param originalBoxShadow the view original boxshadow
+ *
+ */
++(void)configViewLayer:(UIView *_Nullable)view boxShadow:(WXBoxShadow *_Nullable)boxShadow lastBoxShadow:(WXBoxShadow *_Nullable)lastBoxShadow originalBoxShadow:(WXBoxShadow *_Nullable)originalBoxShadow;
+
+/**
+ * @abstract get boxshadow from string and adapter phone screen
+ *
+ * @param string the boxshadow string
+ *
+ * @param scaleFactor the boxshadow set last time
+ *
+ * @return A WXBoxShadow object
+ */
++(WXBoxShadow *_Nullable)getBoxShadowFromString:(NSString *_Nullable)string scaleFactor:(CGFloat)scaleFactor;
@end
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/936a7a77/ios/sdk/WeexSDK/Sources/Utility/WXBoxShadow.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Utility/WXBoxShadow.m b/ios/sdk/WeexSDK/Sources/Utility/WXBoxShadow.m
index c56f365..0708217 100644
--- a/ios/sdk/WeexSDK/Sources/Utility/WXBoxShadow.m
+++ b/ios/sdk/WeexSDK/Sources/Utility/WXBoxShadow.m
@@ -8,12 +8,58 @@
#import "WXBoxShadow.h"
#import "WXConvert.h"
+#import "WXUtility.h"
@implementation WXBoxShadow
-+(void)configLayer:(UIView *)view boxShadow:(WXBoxShadow *)boxShadow
++(WXBoxShadow *)getViewBoxShadow:(UIView *_Nullable)view
{
- if(!boxShadow){
+ WXBoxShadow *boxShadow = [WXBoxShadow new];
+ boxShadow.shadowColor = view.layer.shadowColor;
+ boxShadow.shadowOffset = view.layer.shadowOffset;
+ boxShadow.shadowRadius = view.layer.shadowRadius;
+ boxShadow.shadowOpacity = view.layer.shadowOpacity;
+ return boxShadow;
+}
+
++(void)resetViewLayer:(UIView *_Nullable)view lastBoxShadow:(WXBoxShadow *_Nullable)lastBoxShadow boxShadow:(WXBoxShadow *_Nullable)originalBoxShadow
+{
+ 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.innerLayer) {
+ if (lastBoxShadow.innerLayer) {
+ [lastBoxShadow.innerLayer removeFromSuperlayer];
+ }
+ }
+}
+
+// if not equal return NO, if equal return YES
++(BOOL)EqualBoxShadow:(WXBoxShadow *_Nullable)boxShadow withBoxShadow:(WXBoxShadow *_Nullable)compareBoxShadow
+{
+ if(!compareBoxShadow && !boxShadow) {
+ return YES;
+ } else if (CGColorEqualToColor(boxShadow.shadowColor,compareBoxShadow.shadowColor) &&
+ CGSizeEqualToSize(boxShadow.shadowOffset,compareBoxShadow.shadowOffset) &&
+ WXFloatEqual(boxShadow.shadowRadius,compareBoxShadow.shadowRadius)&& (boxShadow.isInset == boxShadow.isInset))
+ {
+ return YES;
+ }
+ return NO;
+
+}
+
++(void)configViewLayer:(UIView *_Nullable)view boxShadow:(WXBoxShadow *_Nullable)boxShadow lastBoxShadow:(WXBoxShadow *_Nullable)lastBoxShadow originalBoxShadow:(WXBoxShadow *_Nullable)originalBoxShadow
+{
+ if (!boxShadow && !lastBoxShadow) {
+ return;
+ }
+ [self resetViewLayer:view lastBoxShadow:lastBoxShadow boxShadow:originalBoxShadow];
+ if (!boxShadow) {
return;
}
if (boxShadow.isInset) {
@@ -49,7 +95,7 @@
return array;
}
-+(WXBoxShadow *)getBoxShadowFromString:(NSString *)string
++(WXBoxShadow *_Nullable)getBoxShadowFromString:(NSString *_Nullable)string scaleFactor:(CGFloat)scaleFactor
{
if ([string length] == 0) {
return nil;
@@ -64,8 +110,7 @@
if (begin.location < end.location && end.location < [string length]) {
NSRange range = NSMakeRange(begin.location, end.location-begin.location + 1);
NSString *str = [string substringWithRange:range];
- NSString *colorStr = [str stringByReplacingOccurrencesOfString:@" " withString:@""];
- boxShadow.shadowColor = [WXConvert UIColor:colorStr].CGColor;
+ boxShadow.shadowColor = [WXConvert UIColor:str].CGColor;
string = [string stringByReplacingOccurrencesOfString:str withString:@""];// remove color string
}
} else {
@@ -91,20 +136,20 @@
case 0:
{
CGSize size = boxShadow.shadowOffset;
- size.width = [WXConvert CGFloat:remainBoxShadowElements[0]];
+ size.width = [WXConvert WXPixelType:remainBoxShadowElements[0] scaleFactor:scaleFactor];
boxShadow.shadowOffset = size;
}
break;
case 1:
{
CGSize size = boxShadow.shadowOffset;
- size.height = [WXConvert CGFloat:remainBoxShadowElements[1]];
+ size.height = [WXConvert WXPixelType:remainBoxShadowElements[1] scaleFactor:scaleFactor];
boxShadow.shadowOffset = size;
}
break;
case 2:
{
- boxShadow.shadowRadius = [WXConvert CGFloat:remainBoxShadowElements[2]];
+ boxShadow.shadowRadius = [WXConvert WXPixelType:remainBoxShadowElements[2] scaleFactor:scaleFactor];
}
break;
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/936a7a77/ios/sdk/WeexSDK/Sources/Utility/WXConvert.h
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Utility/WXConvert.h b/ios/sdk/WeexSDK/Sources/Utility/WXConvert.h
index ecd6c4c..d9312bc 100644
--- a/ios/sdk/WeexSDK/Sources/Utility/WXConvert.h
+++ b/ios/sdk/WeexSDK/Sources/Utility/WXConvert.h
@@ -69,7 +69,7 @@ typedef BOOL WXClipType;
+ (WXGradientType)gradientType:(id)value;
-+ (WXBoxShadow *)WXBoxShadow:(id)value;
++ (WXBoxShadow *)WXBoxShadow:(id)value scaleFactor:(CGFloat)scaleFactor;
@end
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/936a7a77/ios/sdk/WeexSDK/Sources/Utility/WXConvert.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Utility/WXConvert.m b/ios/sdk/WeexSDK/Sources/Utility/WXConvert.m
index 99c3ee3..c497d28 100644
--- a/ios/sdk/WeexSDK/Sources/Utility/WXConvert.m
+++ b/ios/sdk/WeexSDK/Sources/Utility/WXConvert.m
@@ -723,7 +723,7 @@ WX_NUMBER_CONVERT(NSUInteger, unsignedIntegerValue)
return type;
}
-+ (WXBoxShadow *)WXBoxShadow:(id)value
++ (WXBoxShadow *)WXBoxShadow:(id)value scaleFactor:(CGFloat)scaleFactor
{
NSString *boxShadow = @"";
if([value isKindOfClass:[NSString class]]){
@@ -735,7 +735,7 @@ WX_NUMBER_CONVERT(NSUInteger, unsignedIntegerValue)
WXLogError(@"Convert Error:%@ can not be converted to boxshadow type", value);
}
if (boxShadow) {
- return [WXBoxShadow getBoxShadowFromString:boxShadow];
+ return [WXBoxShadow getBoxShadowFromString:boxShadow scaleFactor:scaleFactor];
}
return nil;
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/936a7a77/ios/sdk/WeexSDK/Sources/View/WXComponent+ViewManagement.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/View/WXComponent+ViewManagement.m b/ios/sdk/WeexSDK/Sources/View/WXComponent+ViewManagement.m
index 541c7d5..86495eb 100644
--- a/ios/sdk/WeexSDK/Sources/View/WXComponent+ViewManagement.m
+++ b/ios/sdk/WeexSDK/Sources/View/WXComponent+ViewManagement.m
@@ -102,13 +102,17 @@
_transform = styles[@"transform"] || styles[@"transformOrigin"] ?
[[WXTransform alloc] initWithCSSValue:[WXConvert NSString:styles[@"transform"]] origin:styles[@"transformOrigin"] instance:self.weexInstance] :
[[WXTransform alloc] initWithCSSValue:nil origin:nil instance:self.weexInstance];
- _boxShadow = styles[@"boxShadow"]?[WXConvert WXBoxShadow:styles[@"boxShadow"]]:nil;
+ _boxShadow = styles[@"boxShadow"]?[WXConvert WXBoxShadow:styles[@"boxShadow"] scaleFactor:self.weexInstance.pixelScaleFactor]:nil;
+ if (_boxShadow) {
+ _lastBoxShadow = _boxShadow;
+ }
}
- (void)_updateViewStyles:(NSDictionary *)styles
{
if (styles[@"boxShadow"]) {
- [WXBoxShadow configLayer:self.view boxShadow:[WXConvert WXBoxShadow:styles[@"boxShadow"]]];
+ _lastBoxShadow = _boxShadow;
+ _boxShadow = styles[@"boxShadow"]?[WXConvert WXBoxShadow:styles[@"boxShadow"] scaleFactor:self.weexInstance.pixelScaleFactor]:nil;
[self setNeedsDisplay];
}
@@ -185,6 +189,11 @@
_layer.backgroundColor = _backgroundColor.CGColor;
[self setNeedsDisplay];
}
+ if (styles && [styles containsObject:@"boxShadow"]) {
+ _lastBoxShadow = _boxShadow;
+ _boxShadow = nil;
+ [self setNeedsDisplay];
+ }
}
- (void)_unloadViewWithReusing:(BOOL)isReusing