Я пытаюсь создать простое приложение / игру для изучения и практики React Native. В настоящее время я пытаюсь создать липкий TouchableNativeFeedback, который перемещается вместе с экраном, поскольку я использую ScrollView.
Идея состоит в том, что левая половина экрана перемещает персонажа влево, а правая половина экрана перемещает его вправо. Я хочу, чтобы эти элементы управления были зафиксированы на дисплее и не двигались.
Вот как это начинается
Это после небольшого перемещения scrollView
Сначала я пытался изменить значение style.left при прокрутке, но это не кажется хорошим / стабильным решением.
Вот текущий код:
render() {
return (
<ScrollView
//onScroll = {this._onScroll}
ref = {(scrollView) => { this.scrollView = scrollView; }}
style = {styles.container}
horizontal= {true}
snapToAlignment = {"center"}
>
<View style = {styles.wrapperView}>
<ImageBackground
style = {styles.container}
source = {require('../images/second.png')}
>
<TouchableNativeFeedback onPressIn = {this._onPressButton} onPressOut = {this._onPressButton}>
<View style = {
{
width: width/2,
height: '100%',
position: 'absolute',
left: this.state.touchableLeft,
backgroundColor: 'red',
}
}>
</View>
</TouchableNativeFeedback>
... (code about the character)
</ImageBackground>
</View>
</ScrollView>
);
}
и код стилей
const styles = StyleSheet.create({
container: {
width: '100%',
height: '100%',
},
wrapperView:{
width: width*3 + 300,
},
});
и просто для справки, это то, что я изначально пробовал:
_onScroll = (event) => {
this.setState( {
touchableLeft: this.state.touchableLeft + event.nativeEvent.contentOffset.x
} )
}
Я просмотрел следующие вопросы и статьи, но не смог найти решение, которое могло бы мне помочь. Обычно люди используют flex, чтобы закрепить свои заголовки над ScrollView, и это невероятно удобно, но в этой ситуации я не уверен, как продолжить. Статьи / вопросы:
Как закрепить заголовок раздела ListView
http://docs.nativebase.io/docs/examples/StickyHeaderExample.html
Думаю, я понимаю, что вы имеете в виду, и это, вероятно, очень глупо с моей стороны, я попробую это через 2 дня, когда у меня снова будет доступ к своему коду. Я отправлю решение, если смогу исправить
Я поместил часть Touchable за пределы ScrollView и попытался установить абсолютное положение, но это просто заставило его исчезнуть из представления
Хорошо, попробуйте разместить сенсорные компоненты после компонента прокрутки или до ... это звучит как порядок элементов с точки зрения более высокой иерархии ... Также попробуйте установить более высокий zindex для сенсорных компонентов
Я поместил его в компонент, который включает этот компонент, и он сработал. Итак, теперь он находится в главном компоненте, из которого этот компонент вызывается. Я попытался поставить его перед ScrollView, и это не сработало. Постараюсь написать решение и выложить
Сладкий! Рад, что смог вам с этим помочь :)



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Моя проблема была решена путем вывода TouchableNativeFeedback за пределы класса. Класс в вопросе назывался Background и был отображен в классе с именем App.
<View style = {styles.container}>
<Background />
<TouchableNativeFeedback onPressIn = {this._onPressButton} onPressOut = {this._onPressButton}>
<View style = {
{
width: '50%',
height: '100%',
position: 'absolute',
left:0,
//left: this.state.touchableLeft,
//backgroundColor: 'red',
}
}>
</View>
</TouchableNativeFeedback>
</View>
Как вы можете видеть, когда я переместил его сюда, он оказался там, где я хотел, даже если я переместил экран. Было бы хорошей практикой перенести его в другой класс компонента, а затем просто вызвать его экземпляр.
Спасибо Джону Радделлу за помощь при поиске решения
почему бы вам просто не сделать их абсолютно позиционированными по отношению к экрану, независимо от положения прокрутки или чего-то еще?