0

现在我正在制作一个 iOS 应用程序,我想通过简单地“删除字母”来实现删除 UILabel 中的字母的能力。我遇到问题的部分是将手势识别器添加到 UILabel 的各个字母中。我已经在网上搜索过这个并且什么都没有。为了清楚起见,我不是在整个标签中添加手势识别器,我只是想将它添加到单个字母中。任何帮助是极大的赞赏。

谢谢

4

3 回答 3

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 像素的任何内容都会让用户感到非常恼火,因此您的字体大小实际上应该非常大,以方便用户交互。

于 2012-12-01T02:27:18.997 回答
0

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

创建一个LetterLabel: UILabel 类并在 init 中设置你的 GestureRecognizer 。

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

LetterLabel *firstLetter = [[LetterLabel alloc] init]
LetterLabel *secondLetter = [[LetterLabel alloc] init]
于 2012-11-30T23:48:50.417 回答
0

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

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

2)在drawInRect:方法中画出自定义标签的字符串

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

编辑:

或者,您可以在自定义标签上使用一个 UIPanGestureRecognizer 来跟踪手指位置,并在自定义标签的范围内移动子层(每个子层可以包含字符串中的一个字符)。这样,您可以更轻松地利用 Core Animation 为角色设置动画(即创建“掉落”效果)。

于 2012-12-01T00:04:17.603 回答