Пару дней назад я обновил свой iPad до 5.0 и одновременно обновил Xcode до 4.2, чтобы я мог продолжать тестировать свои приложения.Теперь у меня проблемы с сенсорным кодом в нескольких приложениях, которые работали с предыдущими версиями Xcode.
Я подклассифицировал UIImageView, чтобы добавить некоторые функции перетаскивания, переопределив -(void)TouchesBegan
и -(void)TouchesMoved
.Я сделал не переопределение -(void)TouchesEnded
в подклассе, но обработал это в контроллере представления для представления, содержащего представление изображения.
Я вытащил подкласс UIImageView
в новый проектдля тестирования, и сузили проблему к факту, что родительский UIView
(шаблон, созданный Xcode), кажется, не передает события прикосновения к контроллеру представления (также созданный Xcode).
Если я добавлю это к своему подклассу:
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
NSLog(@"touches ended event in ImageToDrag");
[self.nextResponder touchesEnded:touches withEvent:event];
}
и это к контроллеру представления моего родительского представления:
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
NSLog(@"touches ended event in ViewController");
}
когда я отпущу изображение, которое яперетаскивая экран, я получаю "touches ended event in ImageToDrag"
, но не журнал от контроллера представления.
Однако, если я намеренно пропущу представление, выполнив это в подклассическом представлении:
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
NSLog(@"touches ended event in ImageToDrag");
[[self.nextResponder nextResponder] touchesEnded:touches withEvent:event];
}
затем я получаю обе записи журнала.
Единственное объяснение, которое я могу придумать, заключается в том, что по какой-то причине UIView
использует событие touchesEnded
и не передает его в контроллер представления.
Я проверил, что exclusiveTouch
установлено на NO
, а userInteractionEnabled
установлено на YES
в родительском представлении и подклассах UIImageView
.
У меня также естьпротестировал компиляцию для iOS 5.0 и iOS 4.2 и развертывание тестового приложения на iPad для iOS 5 и iPad 4.3.1.
Единственный способ, которым я смог передать событие прикосновения к viewController
, - это пропустить просмотр и использовать двойной nextResponder
в подклассе.Хотя этот метод работает, он кажется мне хаком, и я уверен, что он вернется, чтобы укусить меня позже.
Кто-нибудь еще видел такое поведение?Могу ли я узнать, что UIView
делает с моими сенсорными событиями?
Спасибо, Дэн