我想创建一些基本上是photosynth为其教程页面所做的事情的克隆。一个小的 ”?”按钮弹出看起来像一个略小于第一个视图的框架中的新视图,这样您仍然可以看到边缘周围的第一个视图。
从上面的图片看起来有点困难,但边缘周围的部分是教程显示弹出的旧视图。
我的第一个猜测是我需要以某种方式使用容器视图,但我无法在网上找到有关如何执行此操作的任何内容。我现在可以创建一个容器视图,通过segue将它连接到一个新的视图控制器,并在新的视图控制器中执行我想要的任何操作,但容器视图始终在其包含的视图中可见。有什么帮助吗?
BTW,我正在使用ARC的故事板。
答案 0 :(得分:2)
您可以向关键窗口添加透明视图,添加可以关闭它的点击手势识别器以及显示内容的子视图:
#define OVERLAY_TAG 997
-(void)showTutorial
{
UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow];
UIView *overlay = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds];
overlay.backgroundColor = [UIColor clearColor];
overlay.userInteractionEnabled = YES;
[keyWindow addSubview:overlay];
UITapGestureRecognizer * tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(dismissTutorial)];
CGFloat border = 10;
CGRect frame = overlay.bounds;
// 20 is the status bar height (sorry for using the number)
frame = CGRectMake(border, border + 20, frame.size.width - border * 2, frame.size.height - border * 2 - 20);
// the black view in the example is probably a scroll view
UIView *blackView = [[UIView alloc] initWithFrame:frame];
blackView.backgroundColor = [UIColor blackColor];
blackView.alpha = 0.0;
[overlay addSubview:dimView];
// add all the subviews for your tutorial
// make it appear with an animation
[UIView animateWithDuration:0.3
animations:^{dimView.alpha = 1;}
completion:^(BOOL finished){[overlay addGestureRecognizer:tapRecognizer];}];
}
-(void)dismissTutorial
{
UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow];
UIView *overlay = [keyWindow viewWithTag:OVERLAY_TAG];
[UIView animateWithDuration:0.3
animations:^{
overlay.alpha = 0.0;
}
completion:^(BOOL finished){
[overlay removeFromSuperview];
}];
}
这样您可以通过简单的点击删除教程,但您可以使用按钮。