如果已经提出这个问题,我很抱歉,但我已经被问了一个星期了。我有3个图像视图,包含三个标签。我需要做的是允许用户将这些图像视图按字母顺序移动。我已经在图像视图上设置了平移手势,并且已经为所有内容设置了标签。我只需要帮助弄清楚如何在移动标签时检测标签。我将标签文本设置为可变数组,并且正如我所做的那样检查它似乎只运行数组而不是实际标签。这是我第一次做这么复杂的事情。我希望这是有道理的。这是我的代码,感谢任何帮助。
- (void) handlePan:(UIPanGestureRecognizer *)pan
{
if ([pan state] == UIGestureRecognizerStateBegan || [pan state] == UIGestureRecognizerStateChanged) {
CGPoint translation = [pan translationInView:[[pan view] superview]];
[[pan view] setCenter:CGPointMake([[pan view] center].x + translation.x, [[pan view] center].y + translation.y)];
[pan setTranslation:CGPointZero inView:[[pan view] superview]];
}
@try {
if (pan.state == UIGestureRecognizerStateEnded) {
for (int i = 0; i < self.alphabeticalWords.count; i++) {
NSString *labelTextBefore = [self.labels[i] text];
NSString *labelTextAfter = [self.labels[i+1] text];
if ([labelTextBefore compare:labelTextAfter] == NSOrderedAscending) {
NSLog(@"Alphabetical");
[self completedLevel];
self.alphabeticalWords = nil;
}
else {
NSLog(@"First two are not alphabetical!");
labelTextAfter = labelTextBefore;
labelTextBefore = labelTextAfter;
}
}
}
}
@catch (NSException *exception) {
NSLog(@"Method: %s", __PRETTY_FUNCTION__);
}
@finally {}
}
答案 0 :(得分:1)
在正常操作中不要使用try / catch。在Objective C / Cocoa中,你应该避免异常,而不是捕获它们的代码。
至于你的问题,你需要一种从屏幕上的位置转换为订单的方法。
用户是否应该按照正确的顺序将单词拖到黄色框中?你不想让某些方法让用户拖入框中,以便框突出显示,当用户释放对象时,它会捕捉到框的中间?这将带来更好的用户体验。您可以使用CGRectContainsPoint()函数来判断汽车对象的中心是否在矩形内。当汽车中心进入一个盒子时,您可以填充中心或以不同颜色绘制盒子以显示该盒子是目标。然后,当用户释放时,您可以将汽车卡入该框中。
然后,由于您的代码现在知道汽车所在的箱子,您可以根据收到汽车的箱子为其分配值1/2/3。
答案 1 :(得分:1)
如果您有一个名为alphabeticalWords
的数组(按字母顺序排序)和另一个名为labels
的数组(用户正在重新调整),您只能查看该文本中的文本每个标签是否匹配alphabeticalWords
中每个字符串中的文字? E.g。
BOOL ordered = YES;
for (NSUInteger i = 0; i < [alphabeticalWords count]; ++i)
{
if ([[(UILabel *)labels[i] text] isEqualToString:alphabeticalWords[i]] == NO)
{
ordered = NO;
break;
}
}