将UIGestureRecognizer添加到UILabel的各个字母中

时间:2012-11-30 23:43:30

标签: ios uilabel uigesturerecognizer uiswipegesturerecognizer

现在我正在制作iOS应用程序,我想通过简单地“删除字母”来实现删除UILabel中的字母的功能。我遇到问题的部分是为UILabel的各个字母添加手势识别器。我已经在网上搜索了这个并没有任何内容。只是要清楚,我不是在整个标签上添加手势识别器,我只想将它添加到单个字母中。非常感谢任何帮助。

由于

3 个答案:

答案 0 :(得分:1)

似乎最简单的方法是动态计算一个字母的位置。使用此:

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像素。

Apple表示,任何40像素可选择小于40像素的边界对用户来说都是非常烦人的,所以你的字体大小对于用户交互实际上应该非常大。

答案 1 :(得分:0)

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

制作LetterLabel: UILabel课程 并在init中设置你自己的GestureRecognizer。

然后,当您创建字母时,每个字母都会附加识别器

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

答案 2 :(得分:0)

UIGestureRecognizer只能应用于其中的UIView或子类(例如UILabel,就像Adam建议的那样)。如果您担心性能,那么我认为您的下一步将是:

1)子类UIView,以便创建类似UILabel的视图的自定义实现。

2)在drawInRect:方法

中绘制自定义标签的字符串

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

修改

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