iOS开发之路--微博新特性页面
来源:爱站网时间:2017-11-22编辑:网友分享
本文是IOS开发之路系列的第三篇,主要是分享了微博新特性页面的制作源码,希望对大家有所帮助
BeyondAppDelegate.m
// // BeyondAppDelegate.m // 20_帅哥no微博 // // Created by beyond on 14-8-3. // Copyright (c) 2014年 com.beyond. All rights reserved. // #import "BeyondAppDelegate.h" #import "BeyondViewController.h" #import "NewFeatureViewController.h" #import "OauthViewController.h" #define kVersionCodeKey (NSString *)kCFBundleVersionKey @implementation BeyondAppDelegate // 应用最先执行的方法 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // 1,创建窗口 self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; // 2,设置窗口的背景色 self.window.backgroundColor = [UIColor whiteColor]; // 3,调用自定义方法,判断是不是第一次使用本版本的app,如果是第一次使用,则将窗口的根控制器设为了NewFeature控制器,否则 就直接让主控制器成为了窗口的根控制器 [self versionCodeCheck]; // 4,让窗口可见 [self.window makeKeyAndVisible]; return YES; } // 自定义方法,判断是不是第一次使用本版本的app,如果是第一次使用,则将窗口的根控制器设为了NewFeature控制器,否则 就直接让主控制器成为了窗口的根控制器 - (void)versionCodeCheck { // 1,使用用户偏好,从沙盒中取出旧的版本号 NSString *oldVersionCode = [[NSUserDefaults standardUserDefaults] objectForKey:kVersionCodeKey]; NSString *currentVersionCode = [[[NSBundle mainBundle]infoDictionary] objectForKey:kVersionCodeKey]; // 根据版本号的比较结果 进入不同的控制器 //[self stepIntoViewController:currentVersionCode oldVersion:oldVersionCode]; //return; #warning block test -===============以下内容,和其中调用的方法,仅用于block调用测试 if ([currentVersionCode isEqualToString:oldVersionCode]) { //if(0){ [self enterBeyondVC]; } else { // 关键 ,并且保存版本号 [[NSUserDefaults standardUserDefaults]setObject:currentVersionCode forKey:kVersionCodeKey]; // 进入新特性控制器 NewFeatureViewController *newVC = [[NewFeatureViewController alloc]init]; newVC.startBlock = ^(BOOL isSelected){ log(@"%d",isSelected); [self enterBeyondVC]; }; self.window.rootViewController = newVC; } } #warning block test - (void) enterBeyondVC { // 1,如果进行过Oauth授权,则直接进入主控制器,否则 进行Oauth授权控制器 if (1) { OauthViewController *oauthVC = [[OauthViewController alloc]init]; self.window.rootViewController = oauthVC; return; } // 进入主控制器 BeyondViewController *vc =[[BeyondViewController alloc]init]; self.window.rootViewController = vc; } - (void)stepIntoViewController:(NSString *)curVersion oldVersion:(NSString *)oldVersion { // 比较新旧版本号 UIViewController *rootViewController = nil; #warning 测试新特性的view if ([curVersion isEqualToString:oldVersion]) { // if (0){ // 说明不是第一次运行,直接实例化主控制器,将主控制器设置为窗口的根控制器 // 进入主控制器(主界面之前 先把状态栏,恢复) ios 7 无效 // [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationFade]; rootViewController = [[BeyondViewController alloc]init]; } else { // 说明是第一次运行,进入新特性控制器,将新特性控制器设置为窗口的根控制器,并且保存版本号 // 进入新特性控制器(新特性界面之前 先把状态栏,隐藏) ios 7 无效 // [UIApplication sharedApplication].statusBarHidden = YES; // [[UIApplication sharedApplication]setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide]; rootViewController = [[NewFeatureViewController alloc]init]; // 关键 ,并且保存版本号 [[NSUserDefaults standardUserDefaults]setObject:curVersion forKey:kVersionCodeKey]; } // 设置窗口的根控制器,为相应的控制器 self.window.rootViewController = rootViewController; } @end
NewFeatureViewController.h
// // NewFeatureViewController.h // 20_帅哥no微博 // // Created by beyond on 14-8-3. // Copyright (c) 2014年 com.beyond. All rights reserved. // 只使用一次,版本新特性控制器,在第一次运行本版本时启用 #import@interface NewFeatureViewController : UIViewController // 定义一个block作为成员变量,点击开始按钮时,初始化主控制器,让其成为窗口的根控制器 // block用copy @property (nonatomic,copy) void(^startBlock)(BOOL isShare); @end
NewFeatureViewController.m
// // NewFeatureViewController.m // 20_帅哥no微博 // // Created by beyond on 14-8-3. // Copyright (c) 2014年 com.beyond. All rights reserved. // 只使用一次,版本新特性控制器,在第一次运行本版本时启用 /* 写在前面: 当一个控件不显示 的时候,检查下面三个属性: 没有宽度和高度 x y 坐标不正确 没有添加到父控件中 当一个控制不能点击的时候,检查下面个属性: 自己的userinteraction = no 父控件的userinteraction = no 控件本身已经超出了它所在的控制器范围 pageController的高度不能更改,那么就可以置高度为0,其他控件同理 4,居中显示 的标准步骤:先设置center,再设置bounds 5,切换按钮图片可以通过切换按钮的状态来完成 normal:普通 highlighted : 高亮(人为长按的时候) disabled :失效(通过代码控制) selected : 选中 (通过代码控制) */ #import "NewFeatureViewController.h" #define kPicNum 4 #warning viewSize 要改成kWinSize #define viewSize self.view.bounds.size @interface NewFeatureViewController (){ // 页面指示控制器 UIPageControl *_pageControl; // 因为开启按钮的点击事件中需要分享按钮的选中状态 UIButton *_shareBtn; } @end @implementation NewFeatureViewController - (BOOL)prefersStatusBarHidden { // 在LoadView之前 还要先 NSLog(@"prefers bar hidden"); return YES; } - (void)loadView { NSLog(@"load view"); // 新特性,让imageView成为控制器的view,然后才再ImageView上面添加一层scrollView UIImageView *imgView = [[UIImageView alloc]init]; // 设置控制器view(即imgView)的尺寸为全屏 imgView.frame = [UIScreen mainScreen].bounds; NSLog(@"%@",NSStringFromCGRect(imgView.frame)); // 使用分类中的方法,如果是iphone5,加载 -568h的图片 imgView.image = [UIImage fullScrennImageNamed:@"new_feature_background.png"]; // 让控制器的view可以与用户交互 imgView.userInteractionEnabled = YES; // 直接让imgeView成为控制器的view self.view = imgView; } - (void)viewDidLoad { [super viewDidLoad]; NSLog(@"view did load "); // 1,调用自定义方法,加载UIScrollView,并且批量添加UIImageView,每个ImageView中放一张图片 [self addUIScrollView]; // 2,调用自定义方法,加载UIPageControl [self addUIPageControl]; } // 自定义方法,加载UIScrollView,并且批量添加UIImageView,每个ImageView中放一张图片 - (void) addUIScrollView { // 1.加载UIScrollView,并且批量添加UIImageView,每个ImageView中放一张图片 UIScrollView *scrollView = [[UIScrollView alloc] init]; // 显示的可视区域大小 scrollView.frame = self.view.bounds; // 水平滚动条 scrollView.showsHorizontalScrollIndicator = NO; // 按可视区域进行分页 scrollView.pagingEnabled = YES; // 滚动的范围 scrollView.contentSize = CGSizeMake(kPicNum * viewSize.width, 0); // 代理 可以监听滚动的各类事件 scrollView.delegate = self; // 添加到self.view即ImageView [self.view addSubview:scrollView]; // 2,根据索引添加kPicNum张图片排列而成的kPicNum个imageView到scrollView里面 for (int i = 0; i