У меня есть 5 UIImageViews для каждой буквы алфавита, хранящейся в NSMutableDictionary. 5 вместо 1, на случай, если слово, которое они хотят записать, требует больше одной и той же буквы.
Я создаю буквы вот так ...
http://pastie.org/2510574
for (int i = 1; i <= 5; i++)
{
char a = 'a';
NSString *key = [NSString stringWithFormat:@"%c%d", a, i];
alphabetVowelA = [[UIImageView alloc] initWithFrame:CGRectMake(39, 104, 70, 70)];
[alphabetVowelA setImage:[UIImage imageNamed:@"a.png"]];
alphabetVowelA.tag = i;
[alphabetVowelA setUserInteractionEnabled:YES];
[self addGestureRecognizersToPiece:alphabetVowelA];
[letterDictionary setObject:alphabetVowelA forKey:key];
[self.view addSubview:alphabetVowelA];
[alphabetVowelA release];
}
for (int i = 1; i <= 5; i++)
{
char b = 'b';
NSString *key = [NSString stringWithFormat:@"%c%d", b, i];
alphabetB = [[UIImageView alloc] initWithFrame:CGRectMake(112, 104, 70, 70)];
[alphabetB setImage:[UIImage imageNamed:@"b.png"]];
alphabetB.tag = i;
[alphabetB setUserInteractionEnabled:YES];
[self addGestureRecognizersToPiece:alphabetB];
[letterDictionary setObject:alphabetB forKey:key];
[self.view addSubview:alphabetB];
[alphabetB release];
}
С помощью приведенного ниже кода я пытаюсь проверить, пересекается ли одна из букв с другой из того же словаря. Однако, с моим кодом, когда я перемещаю / перетаскиваю одну из буквенных плиток, а затем опускаю ее, он печатает сообщение NSLog для каждого ключа в словаре. Вот пример его вывода.
http://pastie.org/2511092
Этот вывод происходит, даже если ни один из UIImageViews в словаре не пересекался. Это на самом деле происходит после панорамирования, а затем сбрасывания первой буквы, прежде чем даже взять вторую, чтобы она пересекалась при падении. Я не могу понять, почему. Моя кастрюля: код ниже.
http://pastie.org/2511054
- (void)panPiece:(UIPanGestureRecognizer *)gestureRecognizer
{
UIView *piece = [gestureRecognizer view];
[self.view bringSubviewToFront:piece];
if ([gestureRecognizer state] == UIGestureRecognizerStateBegan || [gestureRecognizer state] == UIGestureRecognizerStateChanged) {
CGPoint translation = [gestureRecognizer translationInView:[piece superview]];
CGRect startingPointFrame = CGRectMake(245, 428, 31, 20);
[startingPoint setFrame:startingPointFrame];
[piece setCenter:CGPointMake([piece center].x + translation.x, [piece center].y + translation.y)];
[gestureRecognizer setTranslation:CGPointZero inView:[piece superview]];
}
if ([gestureRecognizer state] == UIGestureRecognizerStateEnded)
{
NSArray *keys = [letterDictionary allKeys];
int nKey = [keys count];
for(int k1 = 0; k1 < nKey; ++ k1) { for(int k2 = k1 + 1; k2 < nKey; ++ k2) {
if ( CGRectIntersectsRect( ((UIImageView*) [letterDictionary objectForKey:[keys objectAtIndex:k1]]).frame, ((UIImageView*) [letterDictionary objectForKey:[keys objectAtIndex:k2]]).frame ) ) {
NSLog(@"k1: %i k2: %i",k1,k2);
}
}
}
}
}
Спасибо!