У меня есть UIImageView
смещение изображения. Слой этого вида замаскирован CAShapeLayer
, чтобы создать круговое «отверстие» на изображении. Чтобы создать отверстие, я использую UIBezierPath
с .usesEvenOddFillRule = true
.Smootly mooving отверстие в UIImage?
Он работает нормально, когда статический. Но мне нужно, чтобы дыра двигалась пальцем пользователя. Для этого я создаю новый UIBezierPath
с четным правилом каждый раз, когда пользователь перемещает свой палец. На небольших телефонах с меньшими изображениями это выглядит нормально, но на iPhone 6 Plus это нестабильно.
Любые идеи о том, как сделать его гладким, очень хороши. Я не могу просто переместить рамку маскировки CAShapeLayer
- он переместил бы бот дыры и спрячет некоторые края изображения. Таким образом, единственный способ - изменить его .path
каждый раз, когда пользователь перемещает палец, и это медленно.
EDIT:matt's answer будет работать в некоторых случаях, но не в моем случае: я не отображает все изображение только часть его определяется UIBezierPath
. Эта часть чаще всего овальная (но может быть прямоугольным или закругленным прямоугольником), и в ней есть «отверстие». Пока отверстие косит пальцами пользователя, отображаемая часть/форма изображения не изменяется - она статична.
ineficient решения, которое было на месте до сих пор в:
- Создать
UIBezierPath
с краем отображаемой части изображения - Set «выравнивается заполнить правило» на нем
- Добавить
UIBezierPath
из отверстие для него - Установить как путь
CAShapeLayer
с некоторым непрозрачным цветом заливки - Используйте что
CAShapeLayer
в маскеUIImageView
Эта процедура повторялась каждый раз, когда пользователь двигал пальцем. Я не могу просто переместить весь слой маски, так как это также изменит часть отображаемого изображения. Я, что он, чтобы оставаться статичным и двигать только отверстие в нем.
См. Мое редактирование. – drasto
Маска изображения, а также маскирует его супер-вид. – matt
Да, это должно сработать! Слишком много работы, мой взгляд на иерархию и множество других факторов, о которых я не упоминал здесь, чтобы это было просто ... Но если я не могу думать ни о каком другом способе, у меня не будет выбора, кроме как сделать эту работу. Спасибо. – drasto