【发布时间】:2014-03-06 01:45:19
【问题描述】:
我正在学习斯坦福 iOS 课程,并且有一点设计问题。在课堂上,我们正在制作一个卡片匹配游戏,屏幕上有大约 20 张卡片。我最近制作了卡片 UIViews,所以我可以正确地绘制它们。
我给了他们每个人一个方法tap,它将faceUp 交换为是/否,从而翻转卡片。我在我的 ViewController 中为每个手势识别器添加了手势识别器,它可以工作。单独的卡片知道它们何时被触摸和翻转。
但是,我需要在我的 ViewController 中知道 cardView 已被触摸...以及哪一个。
我必须如何/以什么方式做到这一点?我可以在我的视图中广播一些 ViewController 会监听的东西吗?我可以让我的 viewController 处理点击(但是如果我这样做,有没有办法获得发送视图?)如果这真的是基础,我很抱歉,但我是 iOS 新手,不想通过修补和实现来学习一个损坏的 MVC 模式。
编辑:仅供参考,这是我的最终实现。
每个 CardView 上都有一个点击识别器。当点击被识别时,它会调用:
- (void)cardTapped:(UIGestureRecognizer *)gesture
{
UIView *view = [gesture view]; // This method is what I was looking for.
if ([view isKindOfClass:[PlayingCardView class]]) {
PlayingCardView *playingCardView = (PlayingCardView *)view;
[playingCardView flip]; // flips card
// Game code
if (!self.game.hasStarted) {
[self startGame];
}
int cardIndex = [self.cardViews indexOfObject:playingCardView];
[self.game chooseCardAtIndex:cardIndex];
[self updateUI];
}
}
【问题讨论】:
-
如果您正在学习最后一门课程(为 iPhone 和 iPad 开发 IOS 7 应用程序),您应该在以下位置找到答案的开头:Lecture 1 / Slide 22(从视图到 VC,使用 Target Action !)
-
是处理卡片视图级别翻转的代码还是包含您卡片的视图控制器?
-
卡片会在当前状态下自行绘制。因此,所需要做的就是修改 faceUp 变量。在我当前的实现中,我的 ViewController 现在识别被点击的视图,修改 faceUp,然后继续进行卡片点击所需的游戏代码。
-
仅供参考,您应该依赖附加到手势识别器的方法,而不是 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
-
@tiguero 我有点想知道这一点。现在看来我有一个没用的方法。但是 touchesBegan 里面有我需要的信息。而我似乎无法通过手势识别器调用的方法来获取该信息。此外,它独立于手势识别器工作。所以也许只删除手势识别器更有意义
标签: ios iphone objective-c