0

У меня есть UIView в контроллере представления с кучей подсмотров (в основном UIButtons) на нем, а когда пользователь заходит за пределы UIView, я хочу, чтобы он был обнаружен, поэтому я могу запустить некоторый код. Этот UIView является подчиненным представлением главного контроллера.У меня есть UIView, представленный в контроллере вида, как определить, когда пользователь выходил за пределы этого представления?

Многие ответы на StackOverflow указывают на создание прозрачного UIButton, охватывающего весь контроллер представления, и добавление UIView поверх этого и обнаружение при прослушивании UIButton.

Для меня это кажется немного взломанным, но я могу ошибаться. Я боюсь, что в будущем выпуске Apple может сделать так, чтобы вы не могли взаимодействовать с прозрачными объектами или чем-то еще, и это сломает решение.

Действительно ли это лучшее решение? Или есть другой способ сделать это, что было бы более чистым?

+0

Можете ли вы добавить изображения View? – Ayush

ответ

1

Предполагая, что UIView в контроллере представления называется view1

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    UITouch *touch = [touches anyObject]; 
    CGPoint p = [touch locationInView:view1]; 


    if (!CGRectContainsPoint(view1.frame, p)) {//when touched out of view1 
     //do action 
    } 
} 
0

Прозрачная кнопка - это не плохое решение. Но если вам нужно использовать другое решение, вы можете использовать метод - (void) touchesBegan:withEvent:. Он определен в UIResponder, который наследует и UIViewController, и UIView. Метод вызывается всякий раз, когда прикосновение не обрабатывается объектом в цепочке ответчиков перед текущим объектом. Это означает, что он не будет вызываться, если прикосновение было на кнопках.

Первый параметр - NSSetUITouch объектов. Вы можете использовать метод UITouch- (CGPoint)locationInView:(UIView *)view, чтобы указать точное местоположение из этого конкретного поднабора. Если местоположение, то есть возвращенная точка, выходит за пределы представления, тогда вы можете выполнить соответствующий код.

1

да это не является хорошим решением для добавления кнопки, есть специальные классы, которые для этого: TapGesture

+0

Мне известно о распознавателях жестов, мой вопрос в том, как определить, находится ли прикосновение вне представления. –

+0

Итак, вы можете использовать решение @Mohannad для обнаружения CGPoint прикосновения и применить точку экземпляра экземпляра UIView - (BOOL) pointInside: (CGPoint) с событиемEvent: (UIEvent *) – samir

0

Попробуйте использовать UIControl объект класса вместо UIView и добавить цели непосредственно к нему.