当前位置: 首页 > 面试题库 >

反应本机圆变换翻译动画

杨起运
2023-03-14
问题内容

嗨,我希望animation.view像一个圆圈一样移动。我以
鼻窦想到了这一点,但没有用。有人知道该怎么做吗?我不想旋转
视图。它应该绕圈移动。我是新来的本地人。
如果有人可以帮助我,那就太好了。

//import liraries
import React, { Component } from 'react';
import { View, Text, StyleSheet, Animated, Button, TouchableOpacity } from 'react-native';

// create a component
class MyClass extends Component {
  constructor() {
    super()
    this.animated = new Animated.Value(0);
  }

  animate() {    
    this.animated.setValue(0)
    Animated.timing(this.animated, {
      toValue: Math.PI *2,
      duration: 1000,
    }).start();
  }


  render() {
    const translateY = this.animated.interpolate({
      inputRange: [0, Math.PI *2],
      outputRange: [0, 200]
    });
    const translateX = translateY
    const transform = [{ translateY }, {translateX}];
    return (
      <View style={styles.container}>
        <Animated.View style={[{ transform }]}>
          <TouchableOpacity style={styles.btn}>
            <Text>hallo</Text>
          </TouchableOpacity>
        </Animated.View>
        <Button title="Test" onPress={() => { 
          this.animate() 
          }} />
      </View>
    );
  }
}

// define your styles
const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
    backgroundColor: '#2c3e50',
  },
  btn: {
    backgroundColor: 'red',
    justifyContent: 'center',
    alignItems: 'center',
    width: 50,
  }
});

//make this component available to the app
export default MyClass;

问题答案:

你算算translateX,并translateY与三角函数功能。

translateX对应Math.sin(),并且translateY是对应于Math.cos()

尽管react-native animated.interpolate不支持函数回调,但是您可以将其分为几部分进行模拟(我在
代码示例中选择了50个):

完整代码:

export class App extends Component {
    constructor() {
        super()
        this.animated = new Animated.Value(0);

        var range = 1, snapshot = 50, radius = 100;
        /// translateX
        var inputRange = [], outputRange = [];
        for (var i=0; i<=snapshot; ++i) {
            var value = i/snapshot;
            var move = Math.sin(value * Math.PI * 2) * radius;
            inputRange.push(value);
            outputRange.push(move);
        }
        this.translateX = this.animated.interpolate({ inputRange, outputRange });

        /// translateY
        var inputRange = [], outputRange = [];
        for (var i=0; i<=snapshot; ++i) {
            var value = i/snapshot;
            var move = -Math.cos(value * Math.PI * 2) * radius;
            inputRange.push(value);
            outputRange.push(move);
        }
        this.translateY = this.animated.interpolate({ inputRange, outputRange });
    }

      animate() {
        this.animated.setValue(0)
        Animated.timing(this.animated, {
          toValue: 1,
          duration: 1000,
        }).start();
      }


      render() {
        const transform = [{ translateY: this.translateY }, {translateX: this.translateX}];
        return (
          <View style={styles.container}>
            <Animated.View style={[{ transform }]}>
              <TouchableOpacity style={styles.btn}>
                <Text>hallo</Text>
              </TouchableOpacity>
            </Animated.View>
            <Button title="Test" onPress={() => { 
              this.animate() 
              }} />
          </View>
        );
      }
    }

    // define your styles
    const styles = StyleSheet.create({
      container: {
        flex: 1,
        justifyContent: 'center',
        alignItems: 'center',
        backgroundColor: '#2c3e50',
      },
      btn: {
        backgroundColor: 'red',
        justifyContent: 'center',
        alignItems: 'center',
        width: 50,
      }
    });


 类似资料:
  • 机器翻译是指将一段文本从一种语言自动翻译到另一种语言。因为一段文本序列在不同语言中的长度不一定相同,所以我们使用机器翻译为例来介绍编码器—解码器和注意力机制的应用。 读取和预处理数据 我们先定义一些特殊符号。其中“<pad>”(padding)符号用来添加在较短序列后,直到每个序列等长,而“<bos>”和“<eos>”符号分别表示序列的开始和结束。 import collections impo

  • 问题是我有组件的层次结构。我有一个父组件、子组件和子组件(便于在代码中导航)。在父级组件中,我有一个ScrollView和一个变量(不是动画变量)contentOffset(处于父级状态),每当滚动发生时,该变量都会发生变化。变量间隔介于[-100100]之间。 父成分 子组件 子组件 我将contentOffset变量作为prop传递给子组件,然后传递给子组件的子组件。如果我使用代码,缩放间隔将

  • 翻译 & 本地化 Docusaurus允许使用 Crowdin 轻松实现翻译功能。 以英文撰写的文档文件将上传到 Crowdin,由社区内的用户进行翻译。 使用英文字符串编写的顶层页面可以通过在 <translate> 标签中包装要翻译的任何字符串来翻译。 其他标题和标签也将被找到并正确翻译。 Docusaurus 翻译配置 要用 Docusaurus 生成用于翻译的示例文件,请使用命令行参数 t

  • 问题内容: 当使用英雄图像或全屏显示时,我通常会看到带有以下CSS的文本或图像: 有人可以向我解释此代码的实际作用吗? 问题答案: 之所以需要这样做,是因为您希望 元素 的中心与父 元素 的中心对齐。简单来说,可以归结为,这意味着: 沿x轴向左移动我宽度的50%,并且 沿y轴将我向上移动我身高的50% 这有效地将元素的中心移动到其原始的左上角。请记住,而不是在元素上进行设置时,您要将其左上角移至其

  • 为什么使用状态自动更新?我将按下按钮,不显示文本输入。但是我可以保存文件而不改变。文本输入将显示。对不起,我的英语不好 从“React”导入React,{useState,useffect};从“react native”导入{Text,TextInput,View,Button,};

  • 问题内容: 我正在React Native中开发一个需要使用Web Map Services的移动应用程序。我尚未找到任何允许同时使用WMS并进行本机响应的库或框架。在React(Web)中,我找到了一个。我的问题是: 您是否知道是否存在允许我使用WMS和React Native的任何库或框架,或者是否有可能在React native中集成React(web)库? 谢谢! 问题答案: 我决定使用的