Итак, у меня есть большой UIButton, это UIButtonTypeCustom, а цель кнопки вызывается для UIControlEventTouchUpInside. Мой вопрос, как я могу определить, где в UIButton произошло касание. Мне нужна эта информация, чтобы я мог отображать всплывающее окно из сенсорного местоположения. Вот что я пробовал:
UITouch *theTouch = [touches anyObject];
CGPoint where = [theTouch locationInView:self];
NSLog(@" touch at (%3.2f, %3.2f)", where.x, where.y);
и различные другие итерации. Целевой метод кнопки получает от нее информацию через sender:
UIButton *button = sender;
Итак, могу ли я использовать что-то вроде: button.touchUpLocation?
Искал в инете, ничего похожего не нашел, заранее спасибо.
Ответ 1 · рейтинг 60 · Caleb
UITouch *theTouch = [touches anyObject];
CGPoint where = [theTouch locationInView:self];
NSLog(@" touch at (%3.2f, %3.2f)", where.x, where.y);
Это правильная идея, за исключением того, что этот код, вероятно, находится внутри действия в вашем контроллере представления, верно? Если это так, то self относится к контроллеру представления, а не к кнопке. Вы должны передать указатель на кнопку в -locationInView:.
Вот проверенное действие, которое вы можете попробовать в своем контроллере представления:
- (IBAction)buttonPressed:(id)sender forEvent:(UIEvent*)event
{
UIView *button = (UIView *)sender;
UITouch *touch = [[event touchesForView:button] anyObject];
CGPoint location = [touch locationInView:button];
NSLog(@"Location in button: %f, %f", location.x, location.y);
}