Добавьте распознаватель жестов в BezierPath, созданный PaintCode.

Мне непонятна следующая ситуация:

Я экспортировал NSObject из PaintCode и создал файл .swift (someObject.swift).

public class PlanATrip: NSObject {

    class func drawRectangle1(frame targetFrame: CGRect = CGRect(x: 0, y: 0, width: 200, height:100), resizing: ResizingBehavior = .aspectFit) {

    ....

}

Я также переопределил функцию draw() в UIView (someObjectView.swift).

Так как же добавить распознаватель жестов в bezierPath (например, rectangle1 = UIBezierPath(...) ), который находится в someObject.swift ?

Я попытался добавить некоторые функции, такие как:

let tapGestureA:UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(touchAction))

Однако масштаб меня смутил; например, если я вынесу функцию touchAction из функции drawRectangle1, я не смогу получить доступ к rectangle1.

Как я могу изменить, чтобы такой распознаватель жестов работал?


person Caspar    schedule 08.09.2017    source источник
comment
Какова ваша конечная цель? Хотите создать пользовательскую кнопку? Я спрашиваю, потому что вижу, что вы пытаетесь добавить UITapGestureRecognizer. Если это так (вы хотите создать пользовательскую кнопку), ответ очень прост (я могу предоставить более подробную информацию). Просто хотел сначала подтвердить, какая у вас конечная цель.   -  person backslash-f    schedule 09.09.2017
comment
@backslash-f Я нарисовал bezierPath и хочу добавить к нему TapGestureRecognizer. Я не совсем уверен, что это пользовательская кнопка.   -  person Caspar    schedule 09.09.2017
comment
Я вижу, у меня есть картина. Пожалуйста, обратитесь к моему ответу ниже. Ваше здоровье!   -  person backslash-f    schedule 09.09.2017


Ответы (2)


Вы пытаетесь манипулировать UIBezierPath объектами, сгенерированными PaintCode напрямую, что не является целью PaintCode.

То, чего вы пытаетесь достичь, возможно, но не без некоторого взлома.
Например: Как получить доступ к слою внутри пользовательского класса UIView, созданного с помощью Paintcode?

На мой взгляд, вы «неправильно используете» PaintCode.

Вместо этого вам было бы намного лучше добавить логику касания в свой собственный файл UIView. То, что вы назвали someObjectView.swift.
Например: https://github.com/backslash-f/paint-code-ui-button

Если вам действительно нужно проверить, происходят ли жесты внутри границ UIBezierPath, вам нужно создать на него общедоступную ссылку (например, var, которая указывает на него за пределами функции drawRectangle1) и, наконец, использовать код, предложенный @Sparky .

Основная проблема с этим подходом заключается в том, что ваши изменения будут перезаписываться каждый раз, когда вы используете функцию экспорта PaintCode. Я бы не рекомендовал это.

person backslash-f    schedule 09.09.2017
comment
Большое спасибо. Я подумаю над тем, что ты сказал. - person Caspar; 09.09.2017

Если я правильно понимаю ваш вопрос, вы хотели бы добавить UITapGestureRecognizer, который будет распознавать жест в части вашего представления, определенной UIBezierPath.

В этом случае назначьте селектор распознавателю жестов, как указано в вашем вопросе, затем в теле touchAction(recognizer:) проверьте, находится ли жест в UIBezierPath. Простой случай, когда вам важно только, находится ли жест внутри UIBezierPath, может быть обработан следующим образом:

func touchAction(recognizer: UITapGestureRecognizer) -> Void {
           guard rectangle1.contains(recognizer.location(in: self)) else { return }

           // Execute your code for the gesture here

           // ...

}
person Marcus    schedule 08.09.2017