Я использую Native Skias Library React, и я пытаюсь выполнить вычисления матрицы для создания паннабельного и увеличиваемого холста Skia (например, Figma или Google Maps). Вот моя реализация до сих пор < /p>
function MyCanvas({
imageView,
canvasWidth,
canvasHeight,
}: {
imageView: Element[];
canvasWidth: number;
canvasHeight: number;
}) {
const translateX = useSharedValue(0);
const translateY = useSharedValue(0);
const scale = useSharedValue(1);
const savedScale = useSharedValue(1);
const focalX = useSharedValue(0);
const focalY = useSharedValue(0);
const matrix = useSharedValue(Matrix4());
const context = useSharedValue({ x: 0, y: 0 });
const panGesture = Gesture.Pan()
.onStart(() => {
context.value = { x: translateX.value, y: translateY.value };
})
.onUpdate((event) => {
translateX.value = event.translationX + context.value.x;
translateY.value = event.translationY + context.value.y;
});
const pinchGesture = Gesture.Pinch()
.onUpdate((event) => {
scale.value = event.scale * savedScale.value;
focalX.value = event.focalX;
focalY.value = event.focalY;
})
.onEnd(() => {
savedScale.value = scale.value;
console.log(matrix.value);
});
const computedMatrix = useDerivedValue(() => {
return processTransform3d([
// 1. Apply current global panning
{ translateX: translateX.value },
{ translateY: translateY.value },
// 2. Translate to pivot point (focal point for zoom)
{ translateX: focalX.value },
{ translateY: focalY.value },
// 3. Apply scaling
{ scale: scale.value },
// 4. Translate back from pivot point
{ translateX: -focalX.value },
{ translateY: -focalY.value },
]);
}, [scale, translateX, translateY, focalX, focalY]);
useDerivedValue(() => {
// console.log(computedMatrix.value);
// This effect updates the Skia Matrix4 instance directly.
matrix.value = computedMatrix.value;
});
const composedGesture = Gesture.Simultaneous(panGesture, pinchGesture);
return (
{imageView}
);
}< /code>
< /div>
< /div>
< /p>
Эти кастрюли (переводится), но всякий раз, когда я пытаюсь укол, чтобы продолжать увеличивать начало происхождения (0,0), а не фокусную точку жеста. Есть предложения?
Подробнее здесь: https://stackoverflow.com/questions/796 ... re-handler
Щетка и масштаб реагируют нативную лыж и реагируют обработчик жестов ⇐ Javascript
Форум по Javascript
1749258508
Anonymous
Я использую Native Skias Library React, и я пытаюсь выполнить вычисления матрицы для создания паннабельного и увеличиваемого холста Skia (например, Figma или Google Maps). Вот моя реализация до сих пор < /p>
function MyCanvas({
imageView,
canvasWidth,
canvasHeight,
}: {
imageView: Element[];
canvasWidth: number;
canvasHeight: number;
}) {
const translateX = useSharedValue(0);
const translateY = useSharedValue(0);
const scale = useSharedValue(1);
const savedScale = useSharedValue(1);
const focalX = useSharedValue(0);
const focalY = useSharedValue(0);
const matrix = useSharedValue(Matrix4());
const context = useSharedValue({ x: 0, y: 0 });
const panGesture = Gesture.Pan()
.onStart(() => {
context.value = { x: translateX.value, y: translateY.value };
})
.onUpdate((event) => {
translateX.value = event.translationX + context.value.x;
translateY.value = event.translationY + context.value.y;
});
const pinchGesture = Gesture.Pinch()
.onUpdate((event) => {
scale.value = event.scale * savedScale.value;
focalX.value = event.focalX;
focalY.value = event.focalY;
})
.onEnd(() => {
savedScale.value = scale.value;
console.log(matrix.value);
});
const computedMatrix = useDerivedValue(() => {
return processTransform3d([
// 1. Apply current global panning
{ translateX: translateX.value },
{ translateY: translateY.value },
// 2. Translate to pivot point (focal point for zoom)
{ translateX: focalX.value },
{ translateY: focalY.value },
// 3. Apply scaling
{ scale: scale.value },
// 4. Translate back from pivot point
{ translateX: -focalX.value },
{ translateY: -focalY.value },
]);
}, [scale, translateX, translateY, focalX, focalY]);
useDerivedValue(() => {
// console.log(computedMatrix.value);
// This effect updates the Skia Matrix4 instance directly.
matrix.value = computedMatrix.value;
});
const composedGesture = Gesture.Simultaneous(panGesture, pinchGesture);
return (
{imageView}
);
}< /code>
< /div>
< /div>
< /p>
Эти кастрюли (переводится), но всякий раз, когда я пытаюсь укол, чтобы продолжать увеличивать начало происхождения (0,0), а не фокусную точку жеста. Есть предложения?
Подробнее здесь: [url]https://stackoverflow.com/questions/79656610/pinch-and-zoom-react-native-skia-and-react-gesture-handler[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия