Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 弹出教程页面,如Photosynth';s_Objective C_Ios - Fatal编程技术网

Objective c 弹出教程页面,如Photosynth';s

Objective c 弹出教程页面,如Photosynth';s,objective-c,ios,Objective C,Ios,我想创建一个基本上是photosynth为他们的教程页面所做的复制品的东西。一个小“?”按钮弹出,看起来像是一个比第一个视图略小的框架中的新视图,这样您仍然可以看到边缘周围的第一个视图 从上面的图片看有点困难,但是边缘周围的部分是教程显示弹出的旧视图 我的第一个猜测是,我需要以某种方式使用容器视图,但我在web上找不到任何关于具体如何实现这一点的信息。我目前可以创建一个容器视图,通过segue将其连接到一个新的视图控制器,并在该新的视图控制器中执行我想要的任何操作,但是容器视图在它所包含的视图

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

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

我的第一个猜测是,我需要以某种方式使用容器视图,但我在web上找不到任何关于具体如何实现这一点的信息。我目前可以创建一个容器视图,通过segue将其连接到一个新的视图控制器,并在该新的视图控制器中执行我想要的任何操作,但是容器视图在它所包含的视图上始终可见。有什么帮助吗


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

您可以在关键点窗口中添加一个透明视图,添加一个轻触手势识别器,该识别器将关闭它,并在子视图中显示内容:

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

通过这种方式,您只需轻触即可删除教程,但也可以使用按钮。

如果您希望在取消覆盖后原始视图再次交互,则可能需要从覆盖视图中删除TapGestureRecognitor。除此之外,它工作得很好。