具有透明背景的iOS操作应用程序扩展?
我正在尝试用最少的用户界面制作一个iOS操作应用程序扩展。基本上,它只会显示一个进度指标,直到行动完成。我只是希望能够设置视图的动画,使其从顶部向下滑动,然后在操作完成后向上滑动。如果有人熟悉Instapaper的共享扩展,那么这就是我想要的基本UI 问题是,当我尝试复制此功能时——我只有一个小的具有透明背景的iOS操作应用程序扩展?,ios,objective-c,uikit,ios-app-extension,Ios,Objective C,Uikit,Ios App Extension,我正在尝试用最少的用户界面制作一个iOS操作应用程序扩展。基本上,它只会显示一个进度指标,直到行动完成。我只是希望能够设置视图的动画,使其从顶部向下滑动,然后在操作完成后向上滑动。如果有人熟悉Instapaper的共享扩展,那么这就是我想要的基本UI 问题是,当我尝试复制此功能时——我只有一个小的UIView,它从顶部向下动画化——我的视图后面有一个黑色背景。我不知道如何使背景透明,以便视图后面的内容仍然可见。有人知道怎么做吗 作为起点,我只是使用由Xcode创建的默认操作扩展模板 在Xcode
UIView
,它从顶部向下动画化——我的视图后面有一个黑色背景。我不知道如何使背景透明,以便视图后面的内容仍然可见。有人知道怎么做吗
作为起点,我只是使用由Xcode创建的默认操作扩展模板
ActionViewController.m
文件中,添加viewwillbeen
方法来设置视图动画(使用1秒动画,以便可以轻松看到黑色背景):modalPresentationStyle
(似乎什么都不做),将整个视图设置为隐藏(这只会使整个屏幕变黑),等等
作为参考,这是使用iOS 9.3.2和Xcode 7.3.1。在视图尚未出现时启动动画是错误的。请您在ViewDidDisplay中尝试相同的代码。 此外,设置主视图控制器视图的动画将使底层可见,因此您必须在视图控制器主视图的顶部使用另一个视图,如下所示:
UIView *progressView = [[UIView alloc] init];
progressView.frame = self.view.bounds;
progressView.backgroundColor = [UIColor redColor];
[self.view addSubView:progressView];
据我所知 在iOS中,操作扩展:
- 帮助用户以不同的方式查看当前文档
- 始终显示在操作表或全屏模式视图中
- 仅当主机应用明确提供时才接收选定内容
//Presenting view controller:
-(void) presentPopUpViewController {
self.definesPresentationContext = YES; //self is presenting view controller
self.presentedVC.modalPresentationStyle = UIModalPresentationOverCurrentContext;
[self presentViewController:self.presentedVC animated:NO completion:nil];
}
//Presented view controller:
-(void) viewDidLoad {
[super viewDidLoad];
CGRect currFrame = self.view.frame;
CGRect newFrame = currFrame;
newFrame.origin.y -= newFrame.size.height;
self.myBackroundView = [[UIView alloc] init];
self.myBackroundView.backgroundColor = [UIColor yellowColor];
self.myBackroundView.frame = newFrame;
[self.view addSubview:self.myBackroundView];
self.view.backgroundColor = [UIColor clearColor];
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[UIView animateWithDuration:5.0 animations:^{
self.myBackroundView.frame = self.view.frame;
}];
}
B。将显示的视图控制器添加为子视图控制器。这样,生命周期保持不变,但您可以将I'ts视图添加为子视图,并更改I'ts框架
//显示视图控制器:
-(void) presentChildViewController {
[self addChildViewController:self.presentedVC];
[self.view addSubview:self.presentedVC.view];
[self.presentedVC didMoveToParentViewController:self];
}
//Presented view controller:
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
CGRect currFrame = self.view.frame;
CGRect newFrame = currFrame;
newFrame.origin.y -= newFrame.size.height;
self.view.frame = newFrame;
[UIView animateWithDuration:1.0 animations:^{
self.view.frame = currFrame;
}];
}
C。不要使用UIViewController,请使用UIView。使用一个“Decorator”对象,将视图控制器传递给它,然后“Decorator”将视图添加为子视图,并处理动画。此场景无需示例。您尝试过情节提要吗?@RomOne,尝试过什么?抱歉,我的意思是您尝试过完全不使用动画,并且使用情节提要将子视图添加到扩展控制器吗?有动画还是没有动画都没有区别。我主要观点背后的任何东西都是黑色的。如果我将主视图的背景设置为透明,则结果为黑色。我仍然不确定您关于使用故事板添加子视图的意思。如果您使用上面的说明创建应用程序扩展,它将创建一个故事板。将子视图添加到情节提要并没有什么不同。到目前为止,我所做的任何尝试都不允许调用应用程序的UI显示在我主视图的UI后面。任何“隐藏”在我的主视图后面的东西都会呈现黑色。没有什么区别。和以前一样。很抱歉,我没有注意到,您正在为视图控制器的主视图设置动画。您应该在此基础上创建另一个视图,如下所示:UIView*progressView=[[UIView alloc]init];progressView.frame=self.view.bounds;progressView.backgroundColor=[UIColor redColor];[self.view addSubView:progressView];然后你可以执行这些动画,我所能做的就是在我的视图控制器的视图(主视图)上放置另一个视图。因此,新视图将显示在主视图的顶部。但是,我仍然无法显示主视图背后的内容,即启动我的扩展的应用程序的内容。如果我使主视图透明或隐藏,那么它显示的只是一个黑色背景,上面有一个新视图。一旦控制器出现,底层的层次结构将被覆盖。有3种选择:1。您可能希望使用容器视图来移动最顶部的控制器。主控制器仍将可见。2.在主控制器视图的顶部插入最顶部的控制器视图,而不使用故事板。3.只需使用主控制器顶部的视图,而不是添加pro
-(void) presentChildViewController {
[self addChildViewController:self.presentedVC];
[self.view addSubview:self.presentedVC.view];
[self.presentedVC didMoveToParentViewController:self];
}
//Presented view controller:
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
CGRect currFrame = self.view.frame;
CGRect newFrame = currFrame;
newFrame.origin.y -= newFrame.size.height;
self.view.frame = newFrame;
[UIView animateWithDuration:1.0 animations:^{
self.view.frame = currFrame;
}];
}