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