Files
Hippy/ios/sdk/component/view/HippyView+HippyViewAnimation.m
T
2021-09-07 19:37:52 +08:00

68 lines
2.2 KiB
Objective-C

/*!
* iOS SDK
*
* Tencent is pleased to support the open source community by making
* Hippy available.
*
* Copyright (C) 2019 THL A29 Limited, a Tencent company.
* All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#import "HippyView+HippyViewAnimation.h"
#import "HippyExtAnimation.h"
#import "HippyConvert.h"
@implementation HippyView (HippyViewAnimation)
- (CAAnimation *)animation:(HippyExtAnimation *)animation keyPath:(NSString *)keyPath {
if ([keyPath isEqualToString:@"backgroundColor"]) {
__block id fromValue = nil;
__block id toValue = nil;
UIColor *fromColor = [HippyConvert UIColor:@(animation.startValue)];
UIColor *toColor = [HippyConvert UIColor:@(animation.endValue)];
if (self.layer.contents) {
BOOL sync = [self getLayerContentForColor:toColor completionBlock:^(UIImage *image) {
toValue = (id)image.CGImage;
}];
if (sync && toValue) {
keyPath = @"contents";
}
else {
return nil;
}
}
else {
toValue = (id)toColor.CGColor;
fromValue = (id)fromColor.CGColor;
}
CABasicAnimation *ani = [CABasicAnimation animationWithKeyPath:keyPath];
ani.duration = animation.duration;
if (fabs(animation.delay) > CGFLOAT_MIN) {
ani.beginTime = CACurrentMediaTime() + animation.delay;
}
ani.timingFunction = animation.timingFunction;
ani.repeatCount = animation.repeatCount;
ani.removedOnCompletion = NO;
ani.fillMode = kCAFillModeForwards;
ani.toValue = toValue;
ani.fromValue = fromValue;
return ani;
}
return nil;
}
@end