2012-10-06 45 views
1

我想創建一些基本上是photosynth爲他們的教程頁面所做的工作的克隆。一個小的 」?」按鈕在比第一個視圖略小的框架中彈出一個看起來像是新視圖的視圖,這樣您仍然可以看到邊緣的第一個視圖。彈出如Photosynth的教程頁面

enter image description here

這是一個有點艱難,從上面的PIC看到,但周圍的邊緣部分是老認爲,本教程顯示在彈出。

我的第一個猜測是我需要以某種方式使用容器視圖,但我無法在網上找到關於如何執行此操作的任何內容。我目前可以創建一個容器視圖,通過一個segue將它連接到一個新的視圖控制器,然後在新的視圖控制器中執行任何我想要的操作,但容器視圖始終在包含它的視圖中可見。任何幫助?

順便說一句,我正在使用與ARC的故事板。

回答

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

這樣你會刪除教程用一個簡單的水龍頭但您可以使用一個按鈕作爲例子。

+0

如果您希望原始視圖在重疊被解除後再次交互,您可能需要從重疊視圖中移除tapGestureRecognizer。除此之外,它很好地工作。 – marcinx