2016-10-10 58 views
1

我有一个UILabel,我已附加触摸,捏,并旋转手势。我遇到的问题是,它只有几个字符,可以使它很难旋转/捏/触摸。有没有一种方法可以为UILabel添加边距,或者在UILabel周围添加一些区域来启动旋转/捏合/触摸动作,以便于操作?增加触摸手势区域为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 

可以很明显的自定义插入值dx和dy以满足您需要。

有关此方法的更多详细的活动: https://developer.apple.com/reference/uikit/uiview/1622533-pointinside?language=objc

情节提要/厦门国际银行

集CustomLabel类,而不是的UILabel

ViewController.m:

保留所有设置的是。您的handlePinch:方法就好了。

P.S.也许最好用UIButton代替UILabel,但这种技术可能仍然有帮助。

+0

对于选项3,我会用我想运行的代码替换“返回自我”吗? –

+0

不,只需按原样添加即可。此方法的实现与您在用户与标签进行交互时要执行的操作无关。但有了这个覆盖,你的自定义视图将捕捉到一个更大框架中的所有触摸(它在所有四个方向上具有“边缘”值) – alexburtnik

+0

所以对于选项3,您仍然必须添加手势识别器,就像之前做过的那样 – alexburtnik