2012-04-10 4 views
0

У меня есть запрос о штрихах на представлении:Как отменить touchesMoved: withEvent:

У меня есть parentView (кадр (0,0,768,1024)), который содержит два подвид (A и B), A (0,0512,768) с меткой 100 и B рамой (512,0512,768) с меткой 200.

Я реализовал методы прикосновений touchesBegan:withEvent:touchesMoved:withEvent:touchesEnded:withEvent:.

Когда я начал касание от А до В touchesBegan и touchesMoved методов увольняет, как ожидалось

мне нужно реализовать: Как прикосновения достигает B от A, touchesEnded А должен уволят и прикосновения стали из B быть уволенными и наоборот. У меня есть своя логика в их соответствующих методах. Может кто-нибудь подскажет, как добиться того же.

+0

Использовали ли вы методы прикосновений 'touchhesBegan: withEvent:' 'touchhesMoved: withEvent:' 'touchesEnded: withEvent:' в ваших представлениях A и B? – gergonzalez

+0

Вид и вид B - это два экземпляра для класса, который является подклассом UIView, и я реализовал эти методы. – ajay

ответ

0

Я бы предложил использовать класс UIPanGestureRecognizer. Прикрепите его к родительскому представлению, установите делегат.

Теперь вы можете следить за состоянием и местоположением. Поэтому, когда состояние UIGestureRecognizerStateBegan проверяет, находится ли местоположение в A или B, а когда состояние UIGestureRecognizerStateEnded, проверьте, находится ли оно в B или A.

Вы можете проверить, есть ли вид на кране A или B,

CGRectContainsRect(<#CGRect rect1#>, <#CGRect rect2#>) 

А затем с помощью view.frame

+0

Даже если я использую UIPanGestureRecognizer, все же я не могу отменить жест в середине изменения жестов. Если UIGestureRecognizerStateChanged и точка панорамирования не находятся в одном представлении, тогда мне нужно запустить UIGestureRecognizerStateBegan и наоборот. – ajay

+0

Если вы переместите UIPanGestureRecognizer в родительский вид и добавьте некоторые состояния BOOL (то есть isInB, isInA), вы можете следить за изменениями и переключаться самостоятельно. – ejazz

1

Это намеренное поведение. Обычно, если вы касаетесь кнопки Отмена, и ваш палец скользит по . Удалите кнопку, когда вы ее поднимите, вы не хотите случайно что-то удалить.

Тем не менее, у меня была ситуация, когда я действительно хотел, чтобы касания проходили так. Подобно @ejazz, я перевел работу на представление, содержащее как A, так и B. Это позволило активировать взаимодействие пользователя и реализовало touchesBegan, touchesMoved и touchesEnded.

Когда касания перемещены по подзонам, они отправили соответствующие сообщения. Я просто включил и выключил subviews, но вы должны иметь возможность просто позвонить touchesBegan, touchesMoved и touchesEnded, если необходимо. Если вам нужно знать, когда начинаются и заканчиваются штрихи, вам нужно будет отслеживать предыдущее представление, связанное с каждым касанием, или просто вызвать его метод previousLocationInView:.

Смежные вопросы