mirror of
https://github.com/zhigang1992/react-native.git
synced 2026-04-23 03:50:11 +08:00
Ios: complete iOS vibration pattern supports (js)
Summary: This is a revised follow up version from #8574 ( originally implemented in `objc` ) This PR change the implementation in JS suggested by javache **motivation** To supports vibration pattern like android. The [iOS vibration implementation link](http://stackoverflow.com/questions/12966467/are-there-apis-for-custom-vibrations-in-ios/13047464#13047464) mentioned by skv-headless at https://github.com/facebook/react-native/pull/6061#discussion_r54062592, which will not be accepted by apple since that implementation uses a private API. Thus, I use pure public API `NSTimer` to implement it. **Note** Since vibration time on iOS is not configurable, there are slightly differences with android. for example: **Android Usage:** `Vibration.vibrate([0, 500, 200, 500])` ==> V(0.5s) --wait(0.2s)--> V(0.5s) `Vibration.vibrate([300, 500, 200, 500])` ==> --wait(0.3s)--> V(0.5s) --wait(0.2s)--> V(0.5s) **iOS Usage:** if first argument is 0, it will not be included in pattern array. ( vibration Closes https://github.com/facebook/react-native/pull/9233 Differential Revision: D3775085 Pulled By: javache fbshipit-source-id: 370495857d5581399de32d2bed1ea1bcce193e9d
This commit is contained in:
committed by
Facebook Github Bot 8
parent
b01feb41d8
commit
2cfe774a56
@@ -30,12 +30,45 @@ var {
|
||||
Text,
|
||||
TouchableHighlight,
|
||||
Vibration,
|
||||
Platform,
|
||||
} = ReactNative;
|
||||
|
||||
exports.framework = 'React';
|
||||
exports.title = 'Vibration';
|
||||
exports.description = 'Vibration API';
|
||||
|
||||
var pattern, patternLiteral, patternDescription;
|
||||
if (Platform.OS === 'android') {
|
||||
pattern = [0, 500, 200, 500];
|
||||
patternLiteral = '[0, 500, 200, 500]';
|
||||
patternDescription = `${patternLiteral}
|
||||
arg 0: duration to wait before turning the vibrator on.
|
||||
arg with odd: vibration length.
|
||||
arg with even: duration to wait before next vibration.
|
||||
`;
|
||||
} else {
|
||||
pattern = [0, 1000, 2000, 3000];
|
||||
patternLiteral = '[0, 1000, 2000, 3000]';
|
||||
patternDescription = `${patternLiteral}
|
||||
vibration length on iOS is fixed.
|
||||
pattern controls durations BETWEEN each vibration only.
|
||||
|
||||
arg 0: duration to wait before turning the vibrator on.
|
||||
subsequent args: duration to wait before next vibrattion.
|
||||
`;
|
||||
}
|
||||
|
||||
exports.examples = [
|
||||
{
|
||||
title: 'Pattern Descriptions',
|
||||
render() {
|
||||
return (
|
||||
<View style={styles.wrapper}>
|
||||
<Text>{patternDescription}</Text>
|
||||
</View>
|
||||
);
|
||||
},
|
||||
},
|
||||
{
|
||||
title: 'Vibration.vibrate()',
|
||||
render() {
|
||||
@@ -51,12 +84,12 @@ exports.examples = [
|
||||
},
|
||||
},
|
||||
{
|
||||
title: 'Vibration.vibrate([0, 500, 200, 500])',
|
||||
title: `Vibration.vibrate(${patternLiteral})`,
|
||||
render() {
|
||||
return (
|
||||
<TouchableHighlight
|
||||
style={styles.wrapper}
|
||||
onPress={() => Vibration.vibrate([0, 500, 200, 500])}>
|
||||
onPress={() => Vibration.vibrate(pattern)}>
|
||||
<View style={styles.button}>
|
||||
<Text>Vibrate once</Text>
|
||||
</View>
|
||||
@@ -65,12 +98,12 @@ exports.examples = [
|
||||
},
|
||||
},
|
||||
{
|
||||
title: 'Vibration.vibrate([0, 500, 200, 500], true)',
|
||||
title: `Vibration.vibrate(${patternLiteral}, true)`,
|
||||
render() {
|
||||
return (
|
||||
<TouchableHighlight
|
||||
style={styles.wrapper}
|
||||
onPress={() => Vibration.vibrate([0, 500, 200, 500], true)}>
|
||||
onPress={() => Vibration.vibrate(pattern, true)}>
|
||||
<View style={styles.button}>
|
||||
<Text>Vibrate until cancel</Text>
|
||||
</View>
|
||||
|
||||
Reference in New Issue
Block a user