У меня есть простой UIButton, и я хочу что-то делать, когда пользователь прикасается к нему, но затем перемещает палец за пределы кнопки и не касается экрана. Похоже, мне нужно прослушать событие UIControlEventTouchUpOutside.
В моем контроллере представления я сделал это:
UIButton *bt = [[UIButton alloc] initWithFrame:rect];
[bt setBackgroundColor:[UIColor whiteColor]];
[bt addTarget:self action:@selector(onTouchUpOutside) forControlEvents:UIControlEventTouchUpOutside];
[self.view addSubview:bt];
и соответствующий метод действия:
- (void)onTouchUpOutside {
NSLog(@"touchUpOutside");
}
теперь угадайте что? Я касаюсь кнопки, затем перетаскиваю палец за ее пределы, отключаю экран, и сообщения не регистрируются. На самом деле он регистрирует меня, что произошло событие UIControlEventTouchUpInside, даже если мой палец на самом деле не находится над кнопкой. Кажется, что я могу перемещать палец примерно на 150% ширины и высоты вокруг этой кнопки во время касания, и он скажет мне, что палец был в кнопке, когда я отключаюсь. Но когда я перемещаю его очень далеко (= достаточно далеко), я получаю сообщение журнала «touchUpOutside». Так это еще одно безумие от Apple, вроде задержки -touchesMoved и тому подобного? Или я что-то не так сделал?