You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@weex.apache.org by ac...@apache.org on 2017/06/09 06:22:24 UTC

[03/12] incubator-weex git commit: * [ios] add perspective support

* [ios] add perspective support


Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/75008cc4
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/75008cc4
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/75008cc4

Branch: refs/heads/0.14-dev
Commit: 75008cc485485d280d1df89af693d27c02538417
Parents: d3b7a1c
Author: acton393 <zh...@gmail.com>
Authored: Tue Jun 6 10:40:41 2017 +0800
Committer: acton393 <zh...@gmail.com>
Committed: Tue Jun 6 10:40:41 2017 +0800

----------------------------------------------------------------------
 ios/sdk/WeexSDK/Sources/Component/WXComponent_internal.h  | 1 +
 ios/sdk/WeexSDK/Sources/Component/WXTransform.h           | 1 +
 ios/sdk/WeexSDK/Sources/Component/WXTransform.m           | 6 ++++++
 ios/sdk/WeexSDK/Sources/Model/WXComponent.m               | 3 ++-
 ios/sdk/WeexSDK/Sources/View/WXComponent+ViewManagement.m | 9 ++++++++-
 5 files changed, 18 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/75008cc4/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 ce2e80a..6e5e327 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXComponent_internal.h
+++ b/ios/sdk/WeexSDK/Sources/Component/WXComponent_internal.h
@@ -55,6 +55,7 @@
     WXBoxShadow *_lastBoxShadow;
     WXBoxShadow *_boxShadow;
     
+    CGFloat _perspective;
     /**
      * accessibility support
      */

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/75008cc4/ios/sdk/WeexSDK/Sources/Component/WXTransform.h
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXTransform.h b/ios/sdk/WeexSDK/Sources/Component/WXTransform.h
index 75db1c7..e9e23c3 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXTransform.h
+++ b/ios/sdk/WeexSDK/Sources/Component/WXTransform.h
@@ -32,6 +32,7 @@
 @property (nonatomic, strong, readonly) WXLength *translateY;
 @property (nonatomic, assign, readonly) float scaleX;
 @property (nonatomic, assign, readonly) float scaleY;
+@property (nonatomic, assign) float perspective;
 
 - (instancetype)initWithCSSValue:(NSString *)cssValue origin:(NSString *)origin instance:(WXSDKInstance *)instance;
 

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/75008cc4/ios/sdk/WeexSDK/Sources/Component/WXTransform.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXTransform.m b/ios/sdk/WeexSDK/Sources/Component/WXTransform.m
index fc15a49..a118c29 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXTransform.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXTransform.m
@@ -60,6 +60,9 @@
         _rotateZ = 0.0;
         _rotateAngle = 0.0;
         
+        // default is parallel projection
+        _perspective = CGFLOAT_MAX;
+        
         [self parseTransform:cssValue];
         [self parseTransformOrigin:origin];
     }
@@ -232,6 +235,9 @@
     }
     CATransform3D nativeTransform3d = [self nativeTransformWithView:view];
     if (!CATransform3DEqualToTransform(view.layer.transform, nativeTransform3d)){
+        if (_perspective) {
+            nativeTransform3d.m34 = -1.0/_perspective;
+        }
         view.layer.transform = nativeTransform3d;
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/75008cc4/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 173dd14..d66fb43 100644
--- a/ios/sdk/WeexSDK/Sources/Model/WXComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Model/WXComponent.m
@@ -92,6 +92,7 @@
         _isViewFrameSyncWithCalculated = YES;
         
         _async = NO;
+        _perspective = CGFLOAT_MAX;
         
         //TODO set indicator style 
         if ([type isEqualToString:@"indicator"]) {
@@ -472,7 +473,7 @@
 {
     WXAssertMainThread();
     
-    _transform = [[WXTransform alloc] initWithNativeTransform:transform instance:self.weexInstance];
+    _transform = [[WXTransform alloc] initWithNativeTransform:CATransform3DMakeAffineTransform(transform) instance:self.weexInstance];
     if (!CGRectEqualToRect(self.calculatedFrame, CGRectZero)) {
         [_transform applyTransformForView:_view];
         [_layer setNeedsDisplay];

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/75008cc4/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 2a158b1..57428ce 100644
--- a/ios/sdk/WeexSDK/Sources/View/WXComponent+ViewManagement.m
+++ b/ios/sdk/WeexSDK/Sources/View/WXComponent+ViewManagement.m
@@ -168,6 +168,10 @@ do {\
     if (_boxShadow) {
         _lastBoxShadow = _boxShadow;
     }
+    if (styles[@"perspective"]) {
+        _perspective = [WXConvert CGFloat:styles[@"perspective"]];
+        _transform.perspective = _perspective;
+    }
 }
 
 - (void)_updateViewStyles:(NSDictionary *)styles
@@ -235,9 +239,12 @@ do {\
             self.view.hidden = YES;
         }
     }
-    
+    if (styles[@"perspective"]) {
+        _perspective = [WXConvert CGFloat:styles[@"perspective"]];
+    }
     if (styles[@"transform"]) {
         _transform = [[WXTransform alloc] initWithCSSValue:[WXConvert NSString:styles[@"transform"]] origin:[WXConvert NSString:self.styles[@"transformOrigin"]] instance:self.weexInstance];
+        _transform.perspective = _perspective;
         if (!CGRectEqualToRect(self.calculatedFrame, CGRectZero)) {
             [_transform applyTransformForView:_view];
             [_layer setNeedsDisplay];