2016-10-10 3 views
1

У меня есть UILabel, к которому я привязал прикосновение, щепотку и поворот жестом. Проблема, с которой я сталкиваюсь, заключается в том, что в ней всего несколько символов, что может затруднить поворот/ущипнуть/прикоснуться. Есть ли способ, чтобы я мог добавить маркер в UILabel или добавить некоторую область вокруг UILabel, которая будет запускать действие rotate/pinch/touch, чтобы было легче манипулировать?Увеличьте область жестов касания для UILabel

Вот пример метода:

- (IBAction)handlePinch:(UIPinchGestureRecognizer *)recognizer { 
    recognizer.view.transform = CGAffineTransformScale(recognizer.view.transform, recognizer.scale, recognizer.scale); 
    currentAction = TEXT_STRETCHING; 
    recognizer.scale = 1; 
} 
+1

Вы можете прикрепить свой жест к своему виду, который содержит ярлык, а не прикреплять его к ярлыку. Затем вы можете проверить, находится ли этот жест в пределах поля, который вы хотите, и перенаправить жест на метку (или просто обработать его в представлении). – keithbhunter

ответ

2

Есть целый ряд решений для Вашего вопроса:

  1. Добавить жест в другой, больший вид.
  2. Если текст вашей метки сцентрированный, вы можете сделать ярлык шире и внешний вид будет оставаться таким, каким он был.
  3. Вы можете подклассифицировать UILabel и переопределить метод hitTest . Таким образом, вы можете увеличить площадь распознавания жестов для пользовательского вида:

CustomLabel.m:

@implementation CustomLabel: UILabel 

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event { 
    CGRect bigRect = CGRectInset(self.bounds, -10, -10); 
    return CGRectContainsPoint(bigRect, point); 
} 

@end 

Вы можете явно задать значения INSET для дх и ду, чтобы удовлетворить ваши необходимо.

Подробнее об этом методе здесь: https://developer.apple.com/reference/uikit/uiview/1622533-pointinside?language=objc

Раскадровка/XIB

Набор CustomLabel класса вместо UILabel

ViewController.m:

Оставьте все как есть , Ваш метод handlePinch: в порядке.

P.S. Возможно, было бы лучше придерживаться UIButton вместо UILabel, но эта техника может по-прежнему быть полезной.

+0

Для варианта 3 я бы заменил «return self» кодом, который я хочу запустить? –

+0

Нет, просто добавьте его как есть. Эта реализация метода не имеет ничего общего с действием, которое вы хотите сделать, когда пользователь взаимодействует с меткой. Но с этим переопределением ваш пользовательский вид поймает все штрихи в большем кадре, чем на самом деле (значение «margin» во всех четырех направлениях) – alexburtnik

+0

Итак, с опцией 3 вам все равно придется добавить свой распознаватель жестов, как вы это делали до – alexburtnik