1

基本的に、photosynth がチュートリアル ページで行うことのクローンを作成したいと考えています。小さな "?" ボタンをクリックすると、最初のビューよりもわずかに小さいフレームに新しいビューのように見えるものがポップアップ表示されるため、端の周りに最初のビューが表示されます。

ここに画像の説明を入力

上の写真だとちょっと見づらいですが、端の部分がチュートリアル画面が飛び出してきた古いビューです。

私の最初の推測では、どうにかしてコンテナー ビューを使用する必要があると思いますが、これを行う方法について正確に Web 上で見つけることができません。現在、コンテナー ビューを作成し、それをセグエ経由で新しいビュー コントローラーに接続し、その新しいビュー コントローラーで必要なことを行うことができますが、コンテナー ビューは、それが含まれるビューに常に表示されます。何か助けはありますか?

ところで、私は 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 に答える