【发布时间】:2011-09-09 23:56:19
【问题描述】:
对于存储在 NSMutableDictionary 中的每个字母表,我有 5 个 UIImageView。 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 消息。这是它的输出示例。
即使字典中没有任何 UIImageView 相交,也会发生此输出。它实际上发生在平移然后放下第一个字母拼贴之后,甚至在拾取第二个拼贴以使其与放下时相交。我不知道为什么。我的锅:代码如下。
- (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);
}
}
}
}
}
谢谢!
【问题讨论】:
标签: ios ipad drag-and-drop uiimageview nsmutabledictionary