Растягивание UIImage по длине UIBezierPath

В основном мне нужно добиться эффекта «косой черты» в стиле Fruit Ninja, где «косая черта» следует за прикосновением пользователя и повторяет форму жеста пользователя, и становится тоньше, чем больше расстояние, на которое пользователь провел пальцем.

Самый простой способ добиться этого, казалось, состоял в том, чтобы собрать все точки, через которые проходит пользователь в UIBezierPath, и «растянуть» изображение по длине BezierPath. Это позволило бы достичь эффекта «слежения», который я искал, а также гарантировать, что линия будет тоньше, если пройденное расстояние больше.

Однако я не могу найти способ реализовать это. Это вообще возможно?

Альтернативы? Спасибо.

P.S: Это для раздела с низким и средним приоритетом обычного приложения, а не игры, поэтому я хотел бы избежать необходимости переходить на OpenGL и тратить много времени на достижение этого (с полностью пользовательским рисунком и т. д.). Что-то на уровне SDK было бы предпочтительнее, и если это вообще невозможно, мы просто придумаем другой пользовательский интерфейс.

Спасибо!


person Dev Kanchen    schedule 09.04.2013    source источник
comment
Можете ли вы рассказать больше об эффекте, которого вы хотите достичь? Немного альтернативной графики было бы здорово.   -  person hfossli    schedule 10.04.2013
comment
lh6.ggpht.com/ Fruit Ninja — лучший пример. Обратите внимание на эффект косой черты, который в основном выглядит как растянутое растровое изображение или что-то совершенно нестандартное. Он повторяет изгиб косой черты пользователя (даже если это круговой жест) и растягивается в течение более длинного жеста. Но я думаю, что нет простого способа сделать это.   -  person Dev Kanchen    schedule 12.04.2013


Ответы (3)


Для довольно простых в использовании методов растяжения изображений/представлений вы можете изучить

https://github.com/hfossli/AGGeometryKit/

person hfossli    schedule 09.04.2013
comment
Хорошо, я думаю, я мог бы применить к изображению кучу преобразований и обновить преобразование в соответствии с направлением и скоростью касания. Но я также хотел бы иметь возможность следовать кривой жеста пользователя и рисовать/растягивать изображение по этому изогнутому пути. Я не знаю, возможно ли это. :) - person Dev Kanchen; 09.04.2013
comment
Да, я не думаю, что это возможно, как вы описываете. - person hfossli; 09.04.2013

Я рекомендую попробовать рисовать с помощью CoreGraphics. См. эту ссылку

http://www.efficientui.com/blog/2011/12/02/how-to-build-a-simple-painting-app-for-ios/

person hfossli    schedule 10.04.2013
comment
Я думаю, что мне, возможно, придется придерживаться этого. Если скриншот Fruit Ninja, который я предоставил, не вдохновляет на какие-либо другие идеи. :) - person Dev Kanchen; 12.04.2013

Хорошо. Может быть, вы можете использовать это.

https://github.com/hfossli/AGDraw

Просто то, что я написал некоторое время назад. Нажмите «Очистить» и попробуйте что-нибудь нарисовать (очистить будет переключаться между двумя типами штрихов). Вы увидите, что ширина пера будет увеличиваться с увеличением скорости, которую вы используете. Я думаю, это соответствует вашим потребностям. Если вы исправите некоторые ошибки, пожалуйста, сделайте запрос на включение. Вы можете использовать код бесплатно, но позже я добавлю лицензию MIT.

person hfossli    schedule 12.04.2013
comment
Конечно, проверим. Спасибо. И отметьте один из этих ответов как принятый в зависимости от того, какой подход я завершаю! - person Dev Kanchen; 12.04.2013