My Animated.View
posiada następujące style:React Native animacje - translateX i translateY podczas skalowania
{
transform: [
{
scale: this.animatedValue.interpolate({
inputRange: [0, 1],
outputRange: [initialScale, 1]
})},
{
translateX: this.animatedValue.interpolate({
inputRange: [0, 1],
outputRange: [startX, endX]
})},
{
translateY: this.animatedValue.interpolate({
inputRange: [0, 1],
outputRange: [startY, endY]
})},
]
}
Kiedy initialScale jest 1 i rozpoczyna się animacja, widzę oczekiwane zachowanie: Animated.View rozpoczyna się (startx, startY) i liniowo przesuwa się do (endX, endY).
Jednak, gdy początkowa wartość skali to 0,5, punktem początkowym widoku nie jest (startX, startY), ruch nie jest liniowy (nieco sferyczny), a punkt końcowy jest nadal zgodny z oczekiwaniami - (endX, endY).
Jak skalować widok, zachowując ruch liniowy i oczekiwaną pozycję początkową?
Kiedy skalować go zobaczyć zachowuje oryginalne centrum X (przesuwając się w prawo). Kiedy przetłumaczysz ten sam widok, będzie on tłumaczył z pozornie przesuniętej pozycji. Jeśli użyjesz dwóch zapakowanych widoków, skalując wewnętrzny i tłumacząc ten zewnętrzny, możesz uzyskać oczekiwany wynik. – ArneHugo
Pomaga to w ruchu sferycznym, ale pozycja początkowa jest nadal wyłączona –
Jeśli można ustawić pochodzenie transformacji, prawdopodobnie można przeskalować ją w kierunku prawego górnego rogu. Jednak pochodzenie transformacji nie jest obsługiwane w trybie natywnym. Możesz jednak * możesz * jednak [użyć transformMatrix] (https://github.com/facebook/react-native/issues/1964#issuecomment-222480415), aby zdefiniować transformację zamiast tego, chociaż jest to zupełnie inny sposób robienia tego. – ArneHugo