小编Pen*_*ise的帖子

如何在 React Native 导航中使用 modalPresentationStyle .fullscreen

我正在尝试创建我的第一个 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)

react-native react-navigation

12
推荐指数
2
解决办法
2万
查看次数

如何使用 Hashicorp Vault 访问 node.js 中的机密

我刚刚在我的 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)

mysql node.js hashicorp-vault

6
推荐指数
1
解决办法
8211
查看次数

如何同步 AVPlayer 和 MTKView

我有一个项目,用户可以在其中拍摄视频,然后向其中添加过滤器或更改亮度和对比度等基本设置。为此,我使用BBMetalImage,它基本上返回MTKView 中的视频(BBMetalView在项目中命名为 a )。

一切正常 - 我可以播放视频,添加过滤器和所需的效果,但没有音频。我就此问过作者,他建议为此使用AVPlayer(或AVAudioPlayer)。所以我做了。但是,视频和音频不同步。可能首先是因为比特率不同,库的作者也提到帧率会因为过滤过程而不同(这消耗的时间是可变的):

渲染视图 FPS 与实际速率并不完全相同。因为视频源输出帧经过过滤器处理,过滤器处理时间是可变的。

首先,我将视频裁剪为所需的纵横比 (4:5)。我将此文件 (480x600) 保存在本地,使用AVVideoProfileLevelH264HighAutoLevelas AVVideoProfileLevelKey. 我的音频配置使用NextLevelSessionExporter,具有以下设置:AVEncoderBitRateKey: 128000AVNumberOfChannelsKey: 2AVSampleRateKey: 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)

synchronization ios avplayer swift metal

5
推荐指数
1
解决办法
1050
查看次数

React Native 中不受 KeyboardAwareScrollView 影响的垂直居中图像

好吧,这已经让我忙了好几个小时了。我正在尝试创建一个登录屏幕,其中主要组件呈现在底部,徽标位于剩余空间中。这就是我想要实现的目标:

期望的结果

为了支持我的文本输入,我使用 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)

react-native

5
推荐指数
1
解决办法
490
查看次数