objective-c - 像Photosynth的那样弹出教程页面

标签 objective-c ios

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

enter image description here

从上图中很难看出,但边缘周围的部分是教程显示弹出的旧 View 。

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

顺便说一句,我正在使用 ARC Storyboard。

最佳答案

您可以向关键窗口添加透明 View ,添加将关闭它的点击手势识别器和显示内容的 subview :

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

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

关于objective-c - 像Photosynth的那样弹出教程页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12761556/

相关文章:

ios - Objective C setFrame 不适用于 UIView

ios - 为什么 Swift 不将此 Int 数组文字转换为正确的类型?

ios - 为什么 'Simulate Background Fetch' 从 Xcode 8 开始导致崩溃 (libsystem_kernel.dylib`mach_msg_trap)?

ios - 如何从 iOS 应用程序获取设备 ID?

ios - swift 和 Objective-C 中的 CellForRowAtIndexPath

php - iOS gzip 压缩到 PHP

ios - replaceCharactersInRange 未按预期工作?

ios - 可移动的 UIImageView 蒙版

ios - 删除等宽约束和调整按钮

iphone - 无法识别的选择器发送到 UIViewController 上的实例