zoukankan      html  css  js  c++  java
  • iOS 首次启动画面,新装或更新用户可以通过它查看简介。

    //
    //  GuideViewController.h
    //  Guide
    //
    //  Created by twb on 13-9-17.
    //  Copyright (c) 2013年 twb. All rights reserved.
    //
    
    #import <UIKit/UIKit.h>
    
    @interface GuideViewController : UIViewController <UIScrollViewDelegate>
    
    @property (nonatomic, strong) UIScrollView *scrollView;
    @property (nonatomic, strong) UIPageControl *pageControl;
    @property (nonatomic, strong) NSMutableArray *images;
    
    + (GuideViewController *)shareInstance;
    + (void)show;
    + (void)hide;
    
    @end
    //
    //  GuideViewController.m
    //  Guide
    //
    //  Created by twb on 13-9-17.
    //  Copyright (c) 2013年 twb. All rights reserved.
    //
    
    #import "GuideViewController.h"
    
    @interface GuideViewController ()
    
    @property (nonatomic, assign) BOOL animating;
    
    @end
    
    @implementation GuideViewController
    
    + (GuideViewController *)shareInstance
    {
        @synchronized(self)
        {
            static GuideViewController *sharedGuide = nil;
            if (sharedGuide == nil)
            {
                sharedGuide = [[self alloc] initWithNibName:@"GuideViewController" bundle:nil];
            }
            return sharedGuide;
        }
    }
    
    + (void)show
    {
        [[GuideViewController shareInstance].scrollView setContentOffset:CGPointMake(0.0f, 0.0f)];
    	[[GuideViewController shareInstance] showGuide];
    }
    
    + (void)hide
    {
    	[[GuideViewController shareInstance] hideGuide];
    }
    
    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
    {
        self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
        if (self) {
            // Custom initialization
            
        }
        return self;
    }
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        
        self.view.backgroundColor = kClearColor;
        
        // Do any additional setup after loading the view from its nib.
        [self setupContent];
        [self setupScrollView];
        [self setupPageControl];
        [self setupScrollViewContent];
    }
    
    - (void)didReceiveMemoryWarning
    {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    - (void)viewDidUnload
    {
        [self setScrollView:nil];
        [self setPageControl:nil];
        [super viewDidUnload];
    }
    
    #pragma mark - setup part.
    
    - (void)setupContent
    {
        // These images retrieve from server. it is empty for just now.
        self.images = [NSMutableArray arrayWithArray:@[@"Default.png", @"Default.png", @"Default.png", @"Default.png"]];
    }
    
    - (void)setupScrollView
    {
        self.scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, kScreenWidth, kScreenHeight - kScreenStatusBarHeight)];
        self.scrollView.pagingEnabled = YES;
        self.scrollView.delegate = self;
        self.scrollView.backgroundColor = kClearColor;
        self.scrollView.showsHorizontalScrollIndicator = NO;
        self.scrollView.showsVerticalScrollIndicator = NO;
    //    self.scrollView.backgroundColor = kOrangeColor;
        self.scrollView.contentSize = CGSizeMake(kScreenWidth * self.images.count, kScreenHeight - kScreenStatusBarHeight);
        [self.view addSubview:self.scrollView];
    }
    
    - (void)setupPageControl
    {
        self.pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(0.0f, self.scrollView.frame.size.height - 30.0f, kScreenWidth, 30.0f)];
        self.pageControl.hidesForSinglePage = YES;
        self.pageControl.numberOfPages = self.images.count;
        [self.pageControl addTarget:self action:@selector(pageChanged:) forControlEvents:UIControlEventValueChanged];
        [self.view addSubview:self.pageControl];
    }
    
    - (void)setupScrollViewContent
    {
        for (NSInteger i = 0; i < self.images.count; i++)
        {
            UIImageView *iv = [[UIImageView alloc] initWithFrame:CGRectMake(i * kScreenWidth, 0.0f, self.scrollView.frame.size.width, self.scrollView.frame.size.height)];
            iv.userInteractionEnabled = YES;
            iv.image = kImageNamed(self.images[i]);
            if (i % 2)
            {
                iv.backgroundColor = kLightGrayColor;
            }
            else
            {
                iv.backgroundColor = kGrayColor;
            }
            [self.scrollView addSubview:iv];
            
            if (i == self.images.count - 1)
            {
                // the end page.
                [iv addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(enter:)]];
            }
        }
    }
    
    #pragma mark - Common part.
    
    - (CGRect)onScreenFrame
    {
    	return [UIScreen mainScreen].applicationFrame;
    }
    
    - (CGRect)offScreenFrame
    {
    	CGRect frame = [self onScreenFrame];
    	switch ([UIApplication sharedApplication].statusBarOrientation)
        {
    		case UIInterfaceOrientationPortrait:
    			frame.origin.y = frame.size.height;
    			break;
    		case UIInterfaceOrientationPortraitUpsideDown:
    			frame.origin.y = -frame.size.height;
    			break;
    		case UIInterfaceOrientationLandscapeLeft:
    			frame.origin.x = frame.size.width;
    			break;
    		case UIInterfaceOrientationLandscapeRight:
    			frame.origin.x = -frame.size.width;
    			break;
    	}
    	return frame;
    }
    
    - (UIWindow *)mainWindow
    {
        UIApplication *app = [UIApplication sharedApplication];
        if ([app.delegate respondsToSelector:@selector(window)])
        {
            return [app.delegate window];
        }
        else
        {
            return [app keyWindow];
        }
    }
    
    #pragma mark - Event part.
    
    - (void)enter:(UITapGestureRecognizer *)sender
    {
        [self hideGuide];
        self.dataManager.defaults.firstLaunch = YES;
    }
    
    - (void)showGuide
    {
        if (!self.animating)
        {
            [GuideViewController shareInstance].view.frame = [self offScreenFrame];
            [[self mainWindow] addSubview:[GuideViewController shareInstance].view];
            self.animating = YES;
            [UIView animateWithDuration:0.25f animations:^{
                [GuideViewController shareInstance].view.frame = [self onScreenFrame];
            } completion:^(BOOL finished) {
                self.animating = NO;
            }];
        }
    }
    
    - (void)hideGuide
    {
        if (!self.animating)
        {
            self.animating = YES;
            [UIView animateWithDuration:0.40f animations:^{
    #if 0
                [GuideViewController shareInstance].view.frame = [self offScreenFrame];
    #else
                [GuideViewController shareInstance].view.transform = CGAffineTransformMakeScale(1.25f, 1.25f);
                [GuideViewController shareInstance].view.alpha = 0.0f;
    #endif
            } completion:^(BOOL finished) {
                [[GuideViewController shareInstance].view removeFromSuperview];
                self.animating = NO;
            }];
        }
    }
    
    - (void)pageChanged:(UIPageControl *)sender
    {
        NSInteger page = sender.currentPage;
        [self.scrollView setContentOffset:CGPointMake(page * kScreenWidth, 0.0f) animated:YES];
    }
    
    #pragma mark - UIScrollViewDelegate
    
    - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
    {
        CGFloat dx = scrollView.contentOffset.x;
        NSInteger page = dx / kScreenWidth;
        
        self.pageControl.currentPage = page;
    }
    
    @end
    


    如何使用?

     "AppDelegate.m"文件中,

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        // Override point for customization after application launch.
        
        // ...
        
        // Show Guide?
        if (!self.dataManager.defaults.firstLaunch)
        {
            [GuideViewController show];
        }
        
        return YES;
    }



  • 相关阅读:
    [CFNews] Ediscovery: 4 scenarios that call for computer forensics
    [CFNews] MacForensicsLab发布MacLockPick 3.0
    [CFNews] Logicube也欲分“山寨机”取证一杯羹
    [CFNews] Tableau 发布全功能只读接口T35689iu
    [转载] Windows 8 TypedURLsTime
    [CFNews] Guidance发布EnCase V7.04.01中文及英文版
    [CFNews] AIS Inc. 发布苹果取证产品MacResponse LE
    [CFNews] Office 20072010、PGP全盘加密快速破解,Passware Kit 11.7发布
    [CFNews] GSI发布EnCase v7.04
    [CFNews] Paraben发布ProjectAPhone新型号ICD8000
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3327331.html
Copyright © 2011-2022 走看看