现在我正在制作iOS应用程序,我想通过简单地“删除字母”来实现删除UILabel中的字母的功能。我遇到问题的部分是为UILabel的各个字母添加手势识别器。我已经在网上搜索了这个并没有任何内容。只是要清楚,我不是在整个标签上添加手势识别器,我只想将它添加到单个字母中。非常感谢任何帮助。
由于
答案 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为角色制作动画(即创建“丢弃”效果)。