我正在尝试创建我的第一个 React Native 应用程序。我有一个登录屏幕,如果用户想要注册,我想从该屏幕导航到注册屏幕。
为了实现这一目标,我正在考虑在第一个屏幕(登录)上方打开一个模式。我创建了以下内容:
import { NavigationContainer } from "@react-navigation/native";
import { createStackNavigator } from "@react-navigation/stack";
const Stack = createStackNavigator();
function RegisterScreen({ navigation }) {
return (
<View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
<Text style={{ fontSize: 30 }}>Register Screen</Text>
<Button onPress={() => navigation.goBack()} title="Go back" />
</View>
);
}
function MyStack() {
return (
<Stack.Navigator>
<Stack.Group>
<Stack.Screen name="Login" component={LoginScreen} options={{ headerShown: false }} />
</Stack.Group>
<Stack.Group screenOptions={{ presentation: "modal", headerShown: false }} options={{modalPresentationStyle: 'fullScreen'}}>
<Stack.Screen name="Register" …Run Code Online (Sandbox Code Playgroud) 我刚刚在我的 Ubuntu 18.04 后端服务器上从 Hashicorp 设置了 Vault。它运行一个 node.js 后端服务器,该服务器曾经使用环境变量来存储 MySQL 数据库的数据。但是,我认为这是不安全的,因此我改为使用 Vault。我现在已将所有机密存储在 Vault 中,并且可以在我的 node.js 应用程序中访问它,如下所示:
const rootKey = "hidden"
const unsealKey = "alsohidden"
var options = {
apiVersion: 'v1',
endpoint: 'https://url.com:8200',
token: rootKey
};
var vault = require("node-vault")(options);
vault.unseal({ key: unsealKey })
.then(() => {
vault.read('secret/db_host')
.then((res) => console.log("result:",res.data.value))
.catch((err) => console.error("error:",err));
});
Run Code Online (Sandbox Code Playgroud)
这会导致在我的控制台日志中打印正确的主机地址。然而,这给我留下了两个问题:
1. 如何在我的 MySQL 连接中使用检索到的信息?我目前使用环境变量执行此操作:
var pool = mysql.createPool({
connectionLimit: 100,
host: process.env.DB_HOST, // how can I call the vault variables here?
user: process.env.DB_USER,
password: process.env.DB_PASS, …Run Code Online (Sandbox Code Playgroud) 我有一个项目,用户可以在其中拍摄视频,然后向其中添加过滤器或更改亮度和对比度等基本设置。为此,我使用BBMetalImage,它基本上返回MTKView 中的视频(BBMetalView在项目中命名为 a )。
一切正常 - 我可以播放视频,添加过滤器和所需的效果,但没有音频。我就此问过作者,他建议为此使用AVPlayer(或AVAudioPlayer)。所以我做了。但是,视频和音频不同步。可能首先是因为比特率不同,库的作者也提到帧率会因为过滤过程而不同(这消耗的时间是可变的):
渲染视图 FPS 与实际速率并不完全相同。因为视频源输出帧经过过滤器处理,过滤器处理时间是可变的。
首先,我将视频裁剪为所需的纵横比 (4:5)。我将此文件 (480x600) 保存在本地,使用AVVideoProfileLevelH264HighAutoLevelas AVVideoProfileLevelKey. 我的音频配置使用NextLevelSessionExporter,具有以下设置:AVEncoderBitRateKey: 128000、AVNumberOfChannelsKey: 2、AVSampleRateKey: 44100。
然后,BBMetalImage 库获取这个保存的音频文件并提供一个 MTKView (BBMetalView) 来显示视频,允许我实时添加过滤器和效果。设置类型如下所示:
self.metalView = BBMetalView(frame: CGRect(x: 0, y: self.view.center.y - ((UIScreen.main.bounds.width * 1.25) / 2), width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.width * 1.25))
self.view.addSubview(self.metalView)
self.videoSource = BBMetalVideoSource(url: outputURL)
self.videoSource.playWithVideoRate = true
self.videoSource.audioConsumer = self.metalAudio
self.videoSource.add(consumer: self.metalView)
self.videoSource.add(consumer: …Run Code Online (Sandbox Code Playgroud) 好吧,这已经让我忙了好几个小时了。我正在尝试创建一个登录屏幕,其中主要组件呈现在底部,徽标位于剩余空间中。这就是我想要实现的目标:
为了支持我的文本输入,我使用 KeyboardAwareScrollView,因为它比 KeyboardAvoidingView 更适合我。我的代码目前如下所示(我计划使用具有 50% 颜色叠加的背景图像而不是红色背景,因此 ImageBackground 也必须保持在原位):
<ImageBackground
source={require('./assets/img/background-clouds.png')}
resizeMode="cover"
style={styles.backgroundImage}>
<View style={styles.backgroundOverlay} />
<View style={styles.dummyView}>
<Text>elloha</Text>
</View>
<Image
source={require('./assets/img/logo.png')}
style={styles.backgroundLogo}
resizeMode="contain"
/>
<KeyboardAwareScrollView
keyboardShouldPersistTaps="always"
keyboardOpeningTime={0}
alwaysBounceHorizontal={false}
alwaysBounceVertical={false}
contentInsetAdjustmentBehavior="automatic"
showsHorizontalScrollIndicator={false}
showsVerticalScrollIndicator={false}
automaticallyAdjustContentInsets={false}
extraScrollHeight={30}
enableOnAndroid>
<StatusBar
backgroundColor="transparent"
barStyle="light-content"
hidden={false}
translucent
/>
<TouchableWithoutFeedback
onPress={Keyboard.dismiss}
accessible={false}>
<View style={styles.content}>
<View style={styles.backgroundContainer}>
<SafeAreaView style={{ flex: 0 }} />
<View style={styles.loginContainer}>
<View style={styles.loginScreen}>
// textinputs and buttons go here
</View>
<SafeAreaView style={{ backgroundColor: 'white' }} />
</View>
<View
style={{
backgroundColor: 'white',
height: Dimensions.get('window').height,
position: …Run Code Online (Sandbox Code Playgroud)