/
githubmr
/
facebook-react-native
Обзор
Документация
Войти
/
githubmr
/
facebook-react-native
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
main
packages/react-native/Libraries/NativeAnimation/Nodes/RCTDiffClampAnimatedNode.mm
64 строки
1 KB
Lulu Wu
Move .m to .mm to make obj-c and C++ headers compatible (#38135)
24 июл 2023, 18:13
24 июл 2023, 18:13
42d6745
Код
Авторство
О чём код?
/* * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ #import <React/RCTDiffClampAnimatedNode.h> #import <React/RCTLog.h> @implementation RCTDiffClampAnimatedNode { NSNumber *_inputNodeTag; CGFloat _min; CGFloat _max; CGFloat _lastValue; } - (instancetype)initWithTag:(NSNumber *)tag config:(NSDictionary<NSString *, id> *)config { if (self = [super initWithTag:tag config:config]) { _inputNodeTag = config[@"input"]; _min = [config[@"min"] floatValue]; _max = [config[@"max"] floatValue]; } return self; } - (void)onAttachedToNode:(RCTAnimatedNode *)parent { [super onAttachedToNode:parent]; self.value = _lastValue = [self inputNodeValue]; } - (void)performUpdate { [super performUpdate]; CGFloat value = [self inputNodeValue]; CGFloat diff = value - _lastValue; _lastValue = value; self.value = MIN(MAX(self.value + diff, _min), _max); } - (CGFloat)inputNodeValue { if (self.parentNodes == nil) { RCTLogWarn(@"Animated.DiffClamp node has not been fully initialised."); return 0; } RCTValueAnimatedNode *inputNode = (RCTValueAnimatedNode *)[self.parentNodes objectForKey:_inputNodeTag]; if (![inputNode isKindOfClass:[RCTValueAnimatedNode class]]) { RCTLogError(@"Illegal node ID set as an input for Animated.DiffClamp node"); return 0; } return inputNode.value; } @end