Когда вы добавляете цель для управления, вы можете передать 3 типа селекторов для действия -
- (void)action
- (void)action:(id)sender
- (void)action:(id)sender withEvent:(UIEvent*)event
Имена не имеют значения, важен номер параметра. Если элемент управления отправляет своей цели сообщение с 2 параметрами, тогда первым параметром будет сам элемент управления (экземпляр UIButton
в вашем случае), вторым - экземпляр UIEvent
. Но вы ожидаете экземпляр NSSet
в качестве первого параметра и отправляете ему сообщение anyObject
, которое UIButton
не понимает. Это причина аварии.
Почему вы пытаетесь отправить событие из управления пользовательским интерфейсом в метод обработки касания touchesMoved:withEvent:
в первую очередь? Это, вероятно, сделает что-то отличное от того, что вы имели в виду.
UPDATE
- (void)touchesMoved:(NSSet*)touches withEvent:(UIEvent *)event {
UITouch *t = [touches anyObject];
CGPoint touchLocation = [t locationInView:self.view];
NSLog(@"%@", NSStringFromCGPoint(touchLocation));
}
- (IBAction)buttongDragged:(id)button withEvent:(UIEvent*)event {
NSSet *touches = [event touchesForView:button];
[self touchesMoved:touches withEvent:event];
}
Обратите внимание, что поскольку touchesMoved:withEvent:
является методом UIResponder
, а представление контроллера равно UIResponder
, этот метод также будет вызываться для событий касания для этого представления.