1

我想创建一些基本上是 photoynth 为他们的教程页面所做的克隆的东西。一个小的 ”?” 按钮会在比第一个视图稍小的框架中弹出一个看起来像新视图的东西,这样您仍然可以看到边缘周围的第一个视图。

在此处输入图像描述

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

我的第一个猜测是我需要以某种方式使用容器视图,但我在网上找不到任何关于如何执行此操作的信息。我目前可以创建一个容器视图,通过 segue 将它连接到一个新的视图控制器,并在那个新的视图控制器中做任何我想做的事情,但是容器视图在它包含的视图中总是可见的。有什么帮助吗?

顺便说一句,我正在使用 ARC 的故事板。

4

1 回答 1

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

这样,您只需轻按一下即可删除教程,但您也可以使用按钮。

于 2012-10-06T17:08:24.540 回答