Я полагаю, что основная проблема заключается в том, что сенсорный слой на экране простирается на несколько пикселей выше видимого экрана, что означает, что касания, возникающие там, технически начинаются за пределами вашего представления UIViewController.Так как ваш UIViewController видит только касания, которые происходят в его представлении, он не увидит эти касания.Поэтому, если на экране вашего устройства коснуться пикселя или двух над видимыми пикселями, прикосновение будет отправлено на любой виртуальный слой, который существует в этой области за пределами экрана (возможно, в строке состояния?).Это препятствует тому, чтобы ваш UIViewController получал какие-либо касания, так как свип не возник в области просмотра вашего UIViewController.
Чтобы обойти это, во время applicationDidLaunch вы можете изменить размер вашего UIWindow, скажем, на 10 пикселей больше для каждогосторона, и создайте промежуточный слой 'background' UIViewController внутри него, соответствующий расширенному размеру окна.Затем установите представление основного интерфейса UIViewController как дочернее по отношению к представлению «фон», вставив 10 пикселей со всех сторон, чтобы соответствовать физическому размеру экрана.Если ваш интерфейс вращается, 10-пиксельное увеличение фонового представления придется повторно применять в методе willAnimateRotationToInterfaceOrientation в фоновом UIViewController каждый раз.
Наконец, в методах touchesBegan / Moved / Ended естьКонтроллер фонового представления направляет их касания непосредственно соответствующим методам в вашем основном контроллере пользовательского интерфейса.Вуаля!
Надеюсь, это поможет, Бен