, растягиваясь от краев:
< ul>
[*] Цель состоит в том, чтобы иметь возможность захватить и перетаскивать края или углы изображения (так же, как интерактивное изменение размера, вы видите в дизайнерских приложениях, таких как Photoshop). Когда края или углы перетаскивают, изображение должно растянуть и изменять его соотношение сторонна динамически. Слева, в правом верхнем, нижнем лево и правом нижнем) соответствующие части изображения должны растягиваться в режиме реального времени. < /li>
Пример: если я возьму верхний правый угол Из изображения только верхний правый участок изображения должен растянуться, сохраняя при этом левую сторону нетронутой. То же самое относится и к каждому краю и углу.
изменение размера с эффектами искажения:
- Я хочу исказить изображение по мере изменения размера, что означает, что соотношение сторон не должно быть сохранено при растяжении или изменении размера. Это обеспечивает полностью свободный эффект растяжения, в отличие от ограничения исходным соотношением сторон. независимо, создание растянутого или искаженного эффекта.
Эффект растяжения должен быть применен плавно во время перетаскивания, не вызывая заметного мерцания или задержки. Он должен чувствовать себя отзывчивым и плавным, когда пользователь перемещает углы или ребра, аналогично взаимодействию в инструментах графического проектирования. < /li>
< /ul>
металлический шейдер (обязательный): < /strong> < /p>
Я определенно буду использовать металл для пользовательского рендеринга для обработки динамического растяжения и искажения изображения. применяются с гладкостью и производительностью. < /li>
< /ul>
Ключевые проблемы: < /strong> < /p>
Swiftui В модификаторах storbizable (), scaledtofit () и scaledtofill () все обеспечивают ограничения при соотношении сторон, что не подходит для этого варианта использования, поскольку я хочу растянуть свободную форму без поддержания соотношения сторон. < /li>
Способность перетаскивать и растягивать определенные части изображения (углы или края) в режиме реального времени имеет решающее значение, и Swiftui не имеет встроенной поддержки для этого. Плавные, преобразования в реальном времени являются ключевыми требованиями, которые необходимо реализовать жидкостью и эффективно, и именно здесь металлические шейдеры будут необходимы. < /li>
< /ul>
Что я попробовал: < /strong> < /p>
Я экспериментировал с модификатором Swiftui Resizeable (), но он недостаточно гибкий для этого использования Случай, поскольку он обеспечивает соблюдение ограничений соотношения сторон. к динамично преобразованию изображения таким образом, чтобы также обрабатывать искажения. Для этой цели. < /li>
< /ul>
желаемый результат: < /strong> < /p>
Изображение должно быть в состоянии свободно растягиваться и искажаться при перетаскивании любого угла или края, не сохраняя отношение сторон. < /li>
Металлические шейдеры должны использоваться для пользовательских эффектов рендеринга изображения, чтобы достичь плавного растяжения и искажения в реальном времени. < /li>
< /ul>
Пример изображения < /strong> (иллюстрация желаемого результата):
Чтобы проиллюстрировать, вот пример, показывающий, как должно вести себя изображение при перетаскивании по краям или углам: < /p>
этим изображением следует манипулировать динамически, как описано , с каждым краем или угловым перетаскиванием, в результате чего изображение простирается от этой конкретной точки. было бы очень оценено!
Подробнее здесь: https://stackoverflow.com/questions/794 ... rner-manip