Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 将UIGestureRecognitor添加到UILabel的各个字母_Ios_Uilabel_Uigesturerecognizer_Uiswipegesturerecognizer - Fatal编程技术网

Ios 将UIGestureRecognitor添加到UILabel的各个字母

Ios 将UIGestureRecognitor添加到UILabel的各个字母,ios,uilabel,uigesturerecognizer,uiswipegesturerecognizer,Ios,Uilabel,Uigesturerecognizer,Uiswipegesturerecognizer,现在我正在制作一个iOS应用程序,我想通过简单的“删除字母”来实现删除UILabel中字母的功能。我遇到问题的部分是在UILabel的单个字母中添加手势识别器。我已经在网上搜索过了,但什么都没有。我只是想说清楚,我不是在整个标签上添加手势识别器,我只是想在单个字母上添加它。非常感谢您的帮助 谢谢如果我理解正确,那么将UILabel子类化听起来是有意义的 制作一个字母标签:UILabel类 在初始化中,在self上设置您的手势识别器 然后,当您创建字母时,每个字母都会附加识别器 LetterLab

现在我正在制作一个iOS应用程序,我想通过简单的“删除字母”来实现删除UILabel中字母的功能。我遇到问题的部分是在UILabel的单个字母中添加手势识别器。我已经在网上搜索过了,但什么都没有。我只是想说清楚,我不是在整个标签上添加手势识别器,我只是想在单个字母上添加它。非常感谢您的帮助


谢谢

如果我理解正确,那么将UILabel子类化听起来是有意义的

制作一个
字母标签:UILabel
类 在初始化中,在self上设置您的手势识别器

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

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

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

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

2) 在drawInRect:方法中将自定义标签的字符串提取到

3) 使用touchsBegind:withEvent:、touchsMoved:withEvent:、touchsEnded:withEvent:方法跟踪手指位置,以便移动/重画支持字符串的字符

编辑:


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

最简单的方法似乎是动态计算字母的位置。使用以下命令:

CGSize textSize = [text sizeWithFont:[UIFont boldSystemFontOfSize:size]
                   constrainedToSize:constrainedSize
                       lineBreakMode:NSLineBreakByWordWrapping];
因此,您可以使用每个标签使用的字体和大小,并使用
[stringInstance length]
属性和
[UILabel numberOfLines]
属性获取标签中每个字母的大致中心,然后对每个标签使用一个简单的TapGestureRecognitor,并在其中调用您的方法

- (NSString*)letterForPoint:(CGPoint)tapCenter inLabel:(UILabel*)label;
在这里,您可以使用所有工具来计算每个字母的大致中心,并添加一个可选择的错误范围和正确的用户响应范围,即x+-20像素和y+-20像素


苹果公司表示,任何可选择的边界小于40像素(40像素对应40像素)的东西都会让用户非常恼火,因此您的字体大小对于用户交互来说应该相当大。

我不能这样做,因为我需要整个UILabel的文本。管理这么多的标签会很困难,我无法获得全部文本。这也会大大降低性能。你可以将每个字母添加到一个单词数组中。这有什么例子吗。。。我不完全清楚你的建议。抱歉。@user1418074在UIView或子类中绘制字符串:(在CALayer中绘制字符串非常类似……CALayer的draw方法为您提供了一个CGContextRef:)。这将有助于绘图代码。@user1418074这将有助于创建Calayer并将其添加到父层(本例中的父层将是与您要创建的自定义标签关联的层):您需要设置[label setSizeToFit:NO],但据我所知,这个尺寸戏剧性地考虑到了这一点。