Repository: incubator-weex Updated Branches: refs/heads/master 21aa9ab57 -> 79b10220d
[WEEX-321] [iOS] fix animationModule with needLayout bug You can see demo http://dotwe.org/vue/afb257a664b58c013eb60a4ef2eb8df7 This issue fix when animation 'needLayout:true' bug. Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/79b10220 Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/79b10220 Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/79b10220 Branch: refs/heads/master Commit: 79b10220dc38bacde0c5e6fc2dbef63d62d78d97 Parents: 21aa9ab Author: doumafang <doumaf...@gmail.com> Authored: Fri Apr 27 21:43:15 2018 +0800 Committer: acton393 <zhangxing610...@gmail.com> Committed: Fri Apr 27 22:20:10 2018 +0800 ---------------------------------------------------------------------- .../WeexSDK/Sources/Module/WXAnimationModule.m | 43 +++++++------------- 1 file changed, 15 insertions(+), 28 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/79b10220/ios/sdk/WeexSDK/Sources/Module/WXAnimationModule.m ---------------------------------------------------------------------- diff --git a/ios/sdk/WeexSDK/Sources/Module/WXAnimationModule.m b/ios/sdk/WeexSDK/Sources/Module/WXAnimationModule.m index a619166..a6e2eb5 100644 --- a/ios/sdk/WeexSDK/Sources/Module/WXAnimationModule.m +++ b/ios/sdk/WeexSDK/Sources/Module/WXAnimationModule.m @@ -134,8 +134,9 @@ @interface WXAnimationModule () -@property (nonatomic,assign) BOOL needLayout; +@property (nonatomic, assign) BOOL needLayout; @property (nonatomic, strong) WXTransition *transition; +@property (nonatomic, strong) NSMutableDictionary *transitionDic; @property (nonatomic, assign) BOOL isAnimationedSuccess; @end @@ -178,6 +179,9 @@ WX_EXPORT_METHOD(@selector(transition:args:callback:)) if (args[@"needLayout"]) { _needLayout = [WXConvert BOOL:args[@"needLayout"]]; _transition = [WXTransition new]; + _transitionDic = [NSMutableDictionary new]; + _transition.filterStyles = [NSMutableDictionary new]; + _transition.oldFilterStyles = [NSMutableDictionary new]; } CAMediaTimingFunction *timingFunction = [WXConvert CAMediaTimingFunction:args[@"timingFunction"]]; NSDictionary *styles = args[@"styles"]; @@ -273,7 +277,7 @@ WX_EXPORT_METHOD(@selector(transition:args:callback:)) [infos addObject:info]; } else if ([property isEqualToString:@"width"]) { if (_needLayout) { - [self animationWithTransitionTarget:target handleProperty:property withDic:args]; + [self transitionWithArgs:args withProperty:property target:target]; } else { @@ -286,7 +290,7 @@ WX_EXPORT_METHOD(@selector(transition:args:callback:)) } } else if ([property isEqualToString:@"height"]) { if (_needLayout) { - [self animationWithTransitionTarget:target handleProperty:property withDic:args]; + [self transitionWithArgs:args withProperty:property target:target]; } else { @@ -302,31 +306,14 @@ WX_EXPORT_METHOD(@selector(transition:args:callback:)) return infos; } -- (void)animationWithTransitionTarget:(WXComponent *)target handleProperty:(NSString *)property withDic:(NSDictionary *)args +- (void)transitionWithArgs:(NSDictionary *)args withProperty:(NSString *)property target:(WXComponent *)target { - NSDictionary *styles = args[@"styles"]; - _transition.filterStyles = [NSMutableDictionary dictionaryWithDictionary:styles]; - _transition.oldFilterStyles =_transition.oldFilterStyles ? :[NSMutableDictionary dictionaryWithDictionary:target.styles] ; - [_transition.oldFilterStyles setObject:@([args[@"duration"] doubleValue]) forKey:kWXTransitionDuration]; - [_transition.oldFilterStyles setObject:@([args[@"delay"] doubleValue]) forKey:kWXTransitionDelay]; - NSString *oldProperty = _transition.oldFilterStyles[kWXTransitionProperty]; - NSString *newProperty; - if (oldProperty) { - if ([oldProperty containsString:property]) { - newProperty = oldProperty; - } - else - { - newProperty = [NSString stringWithFormat:@"%@,%@",oldProperty,property]; - } - } - else - { - newProperty = property; - } - [_transition.oldFilterStyles setObject:newProperty forKey:kWXTransitionProperty]; - [_transition.oldFilterStyles setObject:args[@"timingFunction"] forKey:kWXTransitionTimingFunction]; - [target _modifyStyles:styles]; + [_transition.filterStyles setObject:args[@"styles"][property] forKey:property]; + [_transition.oldFilterStyles setObject:target.styles[property] forKey:property]; + [target _modifyStyles:@{property:args[@"styles"][property]}]; + [_transitionDic setObject:@([args[@"duration"] doubleValue]) forKey:kWXTransitionDuration]; + [_transitionDic setObject:@([args[@"delay"] doubleValue]) forKey:kWXTransitionDelay]; + [_transitionDic setObject:args[@"timingFunction"] forKey:kWXTransitionTimingFunction]; } - (void)animation:(WXComponent *)targetComponent args:(NSDictionary *)args callback:(WXModuleKeepAliveCallback)callback @@ -361,7 +348,7 @@ WX_EXPORT_METHOD(@selector(transition:args:callback:)) [CATransaction commit]; if (_needLayout) { WXPerformBlockOnComponentThread(^{ - [_transition _handleTransitionWithStyles:_transition.filterStyles resetStyles:nil target:targetComponent]; + [_transition _handleTransitionWithStyles:_transitionDic resetStyles:nil target:targetComponent]; }); } }