UNPKG

2.55 kBPlain TextView Raw
1/*
2 * Copyright (c) Facebook, Inc. and its affiliates.
3 *
4 * This source code is licensed under the MIT license found in the
5 * LICENSE file in the root directory of this source tree.
6 */
7
8#import "RCTSliderManager.h"
9
10#import "RCTBridge.h"
11#import "RCTEventDispatcher.h"
12#import "RCTSlider.h"
13#import "UIView+React.h"
14
15@implementation RCTSliderManager
16
17RCT_EXPORT_MODULE()
18
19- (UIView *)view
20{
21 RCTSlider *slider = [RCTSlider new];
22 [slider addTarget:self action:@selector(sliderValueChanged:)
23 forControlEvents:UIControlEventValueChanged];
24 [slider addTarget:self action:@selector(sliderTouchEnd:)
25 forControlEvents:(UIControlEventTouchUpInside |
26 UIControlEventTouchUpOutside |
27 UIControlEventTouchCancel)];
28 return slider;
29}
30
31static void RCTSendSliderEvent(RCTSlider *sender, BOOL continuous)
32{
33 float value = sender.value;
34
35 if (sender.step > 0 &&
36 sender.step <= (sender.maximumValue - sender.minimumValue)) {
37
38 value =
39 MAX(sender.minimumValue,
40 MIN(sender.maximumValue,
41 sender.minimumValue + round((sender.value - sender.minimumValue) / sender.step) * sender.step
42 )
43 );
44
45 [sender setValue:value animated:YES];
46 }
47
48 if (continuous) {
49 if (sender.onValueChange && sender.lastValue != value) {
50 sender.onValueChange(@{
51 @"value": @(value),
52 });
53 }
54 } else {
55 if (sender.onSlidingComplete) {
56 sender.onSlidingComplete(@{
57 @"value": @(value),
58 });
59 }
60 }
61
62 sender.lastValue = value;
63}
64
65- (void)sliderValueChanged:(RCTSlider *)sender
66{
67 RCTSendSliderEvent(sender, YES);
68}
69
70- (void)sliderTouchEnd:(RCTSlider *)sender
71{
72 RCTSendSliderEvent(sender, NO);
73}
74
75RCT_EXPORT_VIEW_PROPERTY(value, float);
76RCT_EXPORT_VIEW_PROPERTY(step, float);
77RCT_EXPORT_VIEW_PROPERTY(trackImage, UIImage);
78RCT_EXPORT_VIEW_PROPERTY(minimumTrackImage, UIImage);
79RCT_EXPORT_VIEW_PROPERTY(maximumTrackImage, UIImage);
80RCT_EXPORT_VIEW_PROPERTY(minimumValue, float);
81RCT_EXPORT_VIEW_PROPERTY(maximumValue, float);
82RCT_EXPORT_VIEW_PROPERTY(minimumTrackTintColor, UIColor);
83RCT_EXPORT_VIEW_PROPERTY(maximumTrackTintColor, UIColor);
84RCT_EXPORT_VIEW_PROPERTY(onValueChange, RCTBubblingEventBlock);
85RCT_EXPORT_VIEW_PROPERTY(onSlidingComplete, RCTDirectEventBlock);
86RCT_EXPORT_VIEW_PROPERTY(thumbTintColor, UIColor);
87RCT_EXPORT_VIEW_PROPERTY(thumbImage, UIImage);
88RCT_CUSTOM_VIEW_PROPERTY(disabled, BOOL, RCTSlider)
89{
90 if (json) {
91 view.enabled = !([RCTConvert BOOL:json]);
92 } else {
93 view.enabled = defaultView.enabled;
94 }
95}
96
97@end