像Photoynth一样弹出教程页面

时间:2012-10-06 16:28:22

标签: objective-c ios

我想创建一些基本上是photosynth为其教程页面所做的事情的克隆。一个小的 ”?”按钮弹出看起来像一个略小于第一个视图的框架中的新视图,这样您仍然可以看到边缘周围的第一个视图。

enter image description here

从上面的图片看起来有点困难,但边缘周围的部分是教程显示弹出的旧视图。

我的第一个猜测是我需要以某种方式使用容器视图,但我无法在网上找到有关如何执行此操作的任何内容。我现在可以创建一个容器视图,通过segue将它连接到一个新的视图控制器,并在新的视图控制器中执行我想要的任何操作,但容器视图始终在其包含的视图中可见。有什么帮助吗?

BTW,我正在使用ARC的故事板。

1 个答案:

答案 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];
                     }];
}

这样您可以通过简单的点击删除教程,但您可以使用按钮。