Objective c - UIActivityViewController 方向模式
Posted
技术标签:
【中文标题】Objective c - UIActivityViewController 方向模式【英文标题】:Objective c - UIActivityViewController orientation mode 【发布时间】:2013-02-20 11:12:32 【问题描述】:我的 iPhone 应用程序设计为仅支持纵向,除了一个显示照片的视图控制器,还支持横向模式。
所以总的来说我的项目支持所有方向,但是每个视图控制器(除了照片视图控制器)都实现了该方法:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
return (interfaceOrientation == UIInterfaceOrientationPortrait);
问题:
在我的一个(仅纵向)视图控制器中,我使用UIActivityViewController
让用户选择通过电子邮件或短信共享内容。
当用户选择电子邮件选项时,它会自动显示 ios 原生电子邮件视图控制器。
如果用户现在将设备的方向更改为横向,电子邮件视图控制器也会更改为横向,现在如果用户点击取消/发送按钮,电子邮件控制器将被关闭,现在我的所有应用程序都处于横向状态!
有没有办法强制 eamil 视图控制器仅处于纵向模式?
我知道我可以创建自己的电子邮件视图控制器和子类UIActivity
来显示它,但是UIActivityViewController
在出现时不会显示默认的电子邮件图标,我真的很喜欢它来显示它而不是一些我将提供的其他(必须是灰色)图标。
【问题讨论】:
所以你不想让你的应用在横向模式下运行? 我不能只将项目设置更改为纵向,因为我确实有一个也支持横向的 PhotoViewController。但除此之外,是的,我不希望任何其他视图控制器支持横向。 因此仅在该特定视图中,在 willAutorotateOrientation 中启用纵向模式 .... 以便电子邮件控制器不会旋转 ... 【参考方案1】:您应该制作另一个 uinavigationcontroller 并从那里展示 uiactivityviewcontroller。 在这段代码中,_image 是一个你想分享的 UIImage。 BlankViewController 只是您可以在 IB 中创建的占位符视图控制器,您还可以将其视图的背景颜色清除并执行您想做的任何外观更改。
__weak CurrentViewController *weakSelf = self ;
UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[_image] applicationActivities:nil] ;
UIViewController *viewC = [[UIViewController alloc] initWithNibName:@"BlankViewController" bundle:nil] ;
UINavigationController *navC = [[UINavigationController alloc] initWithRootViewController:viewC] ;
activityViewController.completionHandler = ^(NSString *activityType, BOOL completed)
[weakSelf dismissViewControllerAnimated:NO completion: ^
; // Your completion handler
] ;
;
[self presentViewController:navC animated:NO completion: ^
[navC presentViewController:activityViewController animated:YES completion: ^
;
] ;
];
【讨论】:
这部分解决了我的问题。我无法在 viewC 上获得清晰的颜色,所以我最终将 CurrentViewController 的视图添加到 viewC 以伪造它【参考方案2】:我在当前正在开发的应用程序中遇到了类似的问题。我最终覆盖了更多的旋转方法,以确保我自己的视图控制器保持纵向。
这对我有用(IOS5+):
- (BOOL) shouldAutorotate
return YES;
- (NSUInteger)supportedInterfaceOrientations
return UIInterfaceOrientationMaskPortrait;
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
return UIInterfaceOrientationPortrait;
- (BOOL)shouldAutorotateToInterfaceOrientation (UIInterfaceOrientation)interfaceOrientation
return (interfaceOrientation == UIInterfaceOrientationPortrait);
如果您是 ios5 之前的版本或不适合您,请查看: http://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/Reference/Reference.html
希望你让它工作。 :)
【讨论】:
【参考方案3】:你应该试试
- (void)viewWillAppear:(BOOL)animated
[self shouldAutorotateToInterfaceOrientation: UIInterfaceOrientationLandscapeRight];
[super viewWillAppear:animated];
在你看来?
【讨论】:
【参考方案4】:找不到解决这个问题的方法,所以我最终实现了自己的电子邮件 UIActivity 子类...
【讨论】:
以上是关于Objective c - UIActivityViewController 方向模式的主要内容,如果未能解决你的问题,请参考以下文章
在 Mac OS X 上结合 Objective-C 和 C/C++