将UIGestureRecognizer添加到UILabel的单个字母

现在我正在做一个iOS应用程序,我想通过简单的“删除字母”来实现删除UILabel中的字母的function。 我遇到的问题是将一个手势识别器添加到UILabel的单个字母中。 我已经search了这个网站,没有任何东西。只是要清楚,我不是添加一个手势识别器的整个标签,我只想要将其添加到单个字母。 任何帮助是极大的赞赏。

谢谢

看来最简单的方法就是dynamic计算一个字母的位置。 用这个:

CGSize textSize = [text sizeWithFont:[UIFont boldSystemFontOfSize:size] constrainedToSize:constrainedSize lineBreakMode:NSLineBreakByWordWrapping]; 

所以你可以得到每个标签使用的字体大小,并使用[stringInstance length]属性和[UILabel numberOfLines]属性获得标签中每个字母的大致中心,然后使用一个简单的tapGestureRecognizer为每个标签,并在那里调用你的方法

 - (NSString*)letterForPoint:(CGPoint)tapCenter inLabel:(UILabel*)label; 

在那里你用一切来计算每个字母的近似中心,并添加一个selectableRange的错误和正确的用户响应为X + – 20像素和Y + – 20像素。

苹果公司表示,任何具有40像素小于40像素的可选界限的东西都会让用户恼火,所以你的字体大小对于用户交互应该是相当大的。

如果我的理解正确,这听起来像UILabel的子类将是有道理的。

制作一个LetterLabel: UILabel类,并在init中设置自己的GestureRecognizer。

然后当你创build你的信件时,每个人都会附加识别器

 LetterLabel *firstLetter = [[LetterLabel alloc] init] LetterLabel *secondLetter = [[LetterLabel alloc] init] 

UIGestureRecognizer只能应用于UIView或者其子类(比如像UILabelbuild议的那样)。 如果你担心performance,那么我认为你的下一步将是:

1)UIView子类为了创build类似UILabel视图的自定义实现。

2)在drawInRect:方法中绘制自定义标签的string

3)使用touchesBegan:withEvent :, touchesMoved:withEvent:和touchesEnded:withEvent:方法来跟踪手指位置,以便移动/重绘支持string的字符。

编辑:

或者,您可以在自定义标签上使用一个UIPanGestureRecognizer来跟踪手指位置,并在自定义标签的边界内移动子图层(每个子图层可以包含string中的字符)。 通过这种方式,您可以更轻松地利用Core Animation来animationangular色(即创build“放下”效果)。