mirror of
https://github.com/Tencent/Hippy.git
synced 2026-10-25 02:30:42 +08:00
68 lines
2.2 KiB
Objective-C
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
|