我需要帮助来了解如何仅从UIViewController
中抽象出交互。出于所有意图和目的,请说我有一个控制拼图的视图控制器。我有一系列的零件视图,一个拼图板视图(放置零件的地方)以及其他一些其他视图。现在,我可以与这些拼图块进行典型的平移式交互。
我需要做的是抽象出交互,以便我可以单击按钮或调用方法,完全改变整个系统的“交互模式”,同时保持所有状态否则就是切换之前的确切位置。例如,在切换之后,他们不必“用手指”拖动棋子,而必须“选择”棋子,然后在陀螺仪的重力作用下滑动。
我对iOS还是很陌生,总体而言实际上很少有OO经验,因此我真的想从更有经验的人那里得到一些建议,然后再利用我的代码来弄清楚。 (是的,我会快照,但是我仍然很紧张!)无论如何,我在想也许我应该做这样的事情:
我不知道这是否会
a)实际工作
b)做到最好
c)足够快以在运行时真正起作用
d)具有可扩展性(我可能需要许多这些不同的“模式”)。
实际上,我越看我写的东西,就越开始怀疑它的意义。求助,请加油。
谢谢!
最佳答案
好问题。
从我的角度来看,OO是应用程序开发的关键点。许多应用程序开发人员根本没有太多关于OO的经验,这会在SO上引起很多误解,烦恼,奇怪的问题和答案。
首先,对Cocoas框架的基本体系结构以及如何使用它们缺乏了解,因为它们在许多方面都遵循继承和对象组成的思想,并使用OO模式。这种缺乏会导致对框架的广泛争夺和/或(在学习了第一个面向对象的 class 时)就面向对象的概念进行了全面的过度设计。
提出一个问题:看来您已经对OO的基本原理学到了足够的知识,以了解框架内发生了什么。现在您应该意识到保持简单。您的益智游戏听起来像是一个典型的应用程序:您单独工作或很少有人在上面工作,整个代码库很小,它不是一个库,它的生命周期会很短,一旦完成,您将修复错误并拥有很小的空间改进,但不适应完整的新环境等。因此,我认为您不应该针对问题中描述的问题大量使用OO模式(即使我认为所描述的解决方案会起作用)。
我会做这样的事情:
实现所有需要的东西,例如:
touchesBegan
,touchesMoved
,touchesEnded
,accelerometer:didAccelerate:
int controlMode; // in PuzzleController.h
例子
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
switch (controlMode)
{
case ControlModeDrag:
touchedPiece = [self findPiece:event];
case ControlModeGravity:
//do nothing;
case ControlModeSomethingElse:
// whatever
default: //...
}
}
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
switch (controlMode)
{
case ControlModeDrag:
[self moveTouchedPiece:event];
case ControlModeGravity:
//do nothing;
case ControlModeSomethingElse:
// whatever
default: //...
}
}
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
switch (controlMode)
{
case ControlModeDrag:
touchedPiece = nil;
case ControlModeGravity:
touchedPiece = [self findPiece:event];
case ControlModeSomethingElse:
// whatever
default: //...
}
}
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration
{
switch (controlMode)
{
case ControlModeDrag:
//do nothing
case ControlModeGravity:
[self moveTouchedPiece:accelaration];
case ControlModeSomethingElse:
// whatever
default: //...
}
}
关于ios - 如何从UIViewController中抽象出交互?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10409549/