摇动以模态打开视图

时间:2010-04-22 23:44:02

标签: iphone modal-dialog shake motion

基于Apple的GLPaint代码,我的“摇动”工作正常(使用motionEnded)。当用户摇动设备(运行3.0及更高版本)时,我想使用presentModalViewController以模态方式打开视图控制器。

在我的appdelegate中,我收到了通知(根据GLPaint示例代码):

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(shakeToOpenHiddenScreen) name:@"shake" object:nil];

在我的shakeToOpenHiddenScreen中,我只是想以模态方式打开视图'x',但我认为我的appdelegate不会响应presentModalViewController。

有解决方法吗?

2 个答案:

答案 0 :(得分:1)

要使用presentModalViewController,您必须从UIViewController类或子类中使用它:

例如:     //RootViewController.m     [self.navigationController presentModalViewController:loginRegView animated:YES];

您可以通过在应用代理中定义导航控制器来解决此问题:

//yourApp_comAppDelegate.h
UINavigationController *nav;
...
@property(nonatomic,retain) UINavigationController *nav;

并合成它

@syntetize nav;    

要使用presentModalViewController,您必须从UIViewController类或子类中使用它:

例如:

//RootViewController.m
[self.navigationController presentModalViewController:loginRegView animated:YES];

您可以通过在应用代理中定义导航控制器来解决此问题:

//yourApp_comAppDelegate.h
UINavigationController *nav;
...
@property(nonatomic,retain) UINavigationController *nav;

合成它

//yourApp_comAppDelegate.m
@synthesize nav;

现在您可以使用以下方法:

//yourApp_comAppDelegate.m
[nav presentModalViewController:yourView animated:YES];

但是,首先你必须将它分配到某个地方,我将在RootViewController

中进行
//RootViewController.m
- (void)viewDidLoad {
    [super viewDidLoad];
app = (yourApp_comAppDelegate *) [[UIApplication sharedApplication] delegate];
    app.nav = self.navigationController
}

应该有用,让我知道:)。

答案 1 :(得分:0)

这是UIViewController上的一个方法,因此您应该可以从appDelegate访问已保存的视图控制器,或者设置通知以调用一个(addObserver:someVC)。

“shake”不是标准的通知名称,因此应用程序中的其他位置应该有一些代码可以发布此通知,可能也是从GLPaint示例中复制的。