Расположение UIButton TouchUpInside Touch
Итак, у меня большой UIButton
, это UIButtonTypeCustom
, а кнопка target вызывается для 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
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);
}
Ответ 2
Для Swift 3.0:
@IBAction func buyTap(_ sender: Any, forEvent event: UIEvent)
{
let myButton:UIButton = sender as! UIButton
let touches: Set<UITouch>? = event.touches(for: myButton)
let touch: UITouch? = touches?.first
let touchPoint: CGPoint? = touch?.location(in: myButton)
print("touchPoint\(touchPoint)")
}
Ответ 3
Вы пытались добавить распознаватель жестов к своей кнопке?