在我的 .h 文件中,我有:
@property (nonatomic) NSMutableArray *cards;
在我的 .m 文件中,我在初始化程序中有:
- (id) init
{
self = [super init];
self.cards = [NSMutableArray alloc];
return self;
}
在填充许多可见和屏幕上的项目的循环中:
[self.cards addObject:noteView];
在触摸事件处理程序中,我有:
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
NSLog(@"In touchesBegan.");
UITouch *touch = [touches anyObject];
UIView *selectedView = nil;
CGPoint touchLocation = [touch locationInView:self.view];
for (UIView *card in _cards)
{
CGRect cardRect = [card frame];
NSLog(@"%f", cardRect.origin.x);
NSLog(@"%f", cardRect.origin.y);
NSLog(@"%f", cardRect.size.height);
NSLog(@"%f", cardRect.size.width);
if (CGRectContainsPoint(cardRect, touchLocation)) {
NSLog(@"Match found.");
selectedView = card;
CGRect selectedFrame = selectedView.frame;
selectedFrame.origin.y = -selectedFrame.size.height;
selectedFrame.size = selectedView.frame.size;
float heightRatio = (float) floor([[UIScreen mainScreen] bounds].size.height + .4) / (float) selectedFrame.size.height;
float widthRatio = (float) floor([[UIScreen mainScreen] bounds].size.width + .4) / (float) selectedFrame.size.width;
float ratio = MIN(heightRatio, widthRatio);
selectedFrame.size.height *= ratio;
selectedFrame.size.width *= ratio;
selectedFrame.origin.x = -selectedFrame.origin.x * ratio;
}
}
}
我所做的每一次触摸的输出都是输出无条件的 NSLog 语句,但没有执行“记录这个浮点数”语句。看来我没有正确初始化或未正确填充 NSMutableArray。
无论我引用 _cards 还是 self.cards,我似乎都会得到相同的行为。
谢谢你的帮助,
- 编辑 -
我似乎坚持的不是最初的想法。我现在有 self.cards = [[NSMutableArray alloc] init],但行为相同:我通过一个循环并填充一堆卡片,但是当我点击其中一个时,触摸处理程序输出“In touchesBegan”。但没有花车。给定一个更新的初始化程序,为什么 touchesBegan 在屏幕上显示了许多卡片之后就表现得好像没有看到任何卡片一样?(另一个输出应该给出多行浮点数,无论触摸是否针对特定卡片的目标。)