zl程序教程

您现在的位置是:首页 >  移动开发

当前栏目

iOS开发之路--微博新特性页面

ios开发 页面 特性 -- 之路
2023-06-13 09:15:44 时间

BeyondAppDelegate.m

//
//BeyondAppDelegate.m
//20_帅哥no微博
//
//Createdbybeyondon14-8-3.
//Copyright(c)2014年com.beyond.Allrightsreserved.
//

#import"BeyondAppDelegate.h"
#import"BeyondViewController.h"
#import"NewFeatureViewController.h"
#import"OauthViewController.h"
#definekVersionCodeKey(NSString*)kCFBundleVersionKey
@implementationBeyondAppDelegate
//应用最先执行的方法
-(BOOL)application:(UIApplication*)applicationdidFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{
//1,创建窗口
self.window=[[UIWindowalloc]initWithFrame:[[UIScreenmainScreen]bounds]];
//2,设置窗口的背景色
self.window.backgroundColor=[UIColorwhiteColor];
//3,调用自定义方法,判断是不是第一次使用本版本的app,如果是第一次使用,则将窗口的根控制器设为了NewFeature控制器,否则就直接让主控制器成为了窗口的根控制器
[selfversionCodeCheck];
//4,让窗口可见
[self.windowmakeKeyAndVisible];
returnYES;
}

//自定义方法,判断是不是第一次使用本版本的app,如果是第一次使用,则将窗口的根控制器设为了NewFeature控制器,否则就直接让主控制器成为了窗口的根控制器
-(void)versionCodeCheck
{
//1,使用用户偏好,从沙盒中取出旧的版本号

NSString*oldVersionCode=[[NSUserDefaultsstandardUserDefaults]objectForKey:kVersionCodeKey];
NSString*currentVersionCode=[[[NSBundlemainBundle]infoDictionary]objectForKey:kVersionCodeKey];

//根据版本号的比较结果进入不同的控制器
//[selfstepIntoViewController:currentVersionCodeoldVersion:oldVersionCode];
//return;

#warningblocktest-===============以下内容,和其中调用的方法,仅用于block调用测试
if([currentVersionCodeisEqualToString:oldVersionCode]){
//if(0){
[selfenterBeyondVC];
}else{
//关键,并且保存版本号
[[NSUserDefaultsstandardUserDefaults]setObject:currentVersionCodeforKey:kVersionCodeKey];

//进入新特性控制器
NewFeatureViewController*newVC=[[NewFeatureViewControlleralloc]init];
newVC.startBlock=^(BOOLisSelected){
log(@"%d",isSelected);
[selfenterBeyondVC];
};
self.window.rootViewController=newVC;
}
}

#warningblocktest
-(void)enterBeyondVC
{
//1,如果进行过Oauth授权,则直接进入主控制器,否则进行Oauth授权控制器
if(1){
OauthViewController*oauthVC=[[OauthViewControlleralloc]init];
self.window.rootViewController=oauthVC;
return;
}


//进入主控制器
BeyondViewController*vc=[[BeyondViewControlleralloc]init];
self.window.rootViewController=vc;
}

-(void)stepIntoViewController:(NSString*)curVersionoldVersion:(NSString*)oldVersion
{
//比较新旧版本号
UIViewController*rootViewController=nil;
#warning测试新特性的view
if([curVersionisEqualToString:oldVersion]){
//if(0){
//说明不是第一次运行,直接实例化主控制器,将主控制器设置为窗口的根控制器
//进入主控制器(主界面之前先把状态栏,恢复)ios7无效
//[[UIApplicationsharedApplication]setStatusBarHidden:NOwithAnimation:UIStatusBarAnimationFade];
rootViewController=[[BeyondViewControlleralloc]init];
}else{
//说明是第一次运行,进入新特性控制器,将新特性控制器设置为窗口的根控制器,并且保存版本号
//进入新特性控制器(新特性界面之前先把状态栏,隐藏)ios7无效
//[UIApplicationsharedApplication].statusBarHidden=YES;
//[[UIApplicationsharedApplication]setStatusBarHidden:YESwithAnimation:UIStatusBarAnimationSlide];
rootViewController=[[NewFeatureViewControlleralloc]init];
//关键,并且保存版本号
[[NSUserDefaultsstandardUserDefaults]setObject:curVersionforKey:kVersionCodeKey];
}
//设置窗口的根控制器,为相应的控制器
self.window.rootViewController=rootViewController;
}
@end

NewFeatureViewController.h

//
//NewFeatureViewController.h
//20_帅哥no微博
//
//Createdbybeyondon14-8-3.
//Copyright(c)2014年com.beyond.Allrightsreserved.
//只使用一次,版本新特性控制器,在第一次运行本版本时启用

#import<UIKit/UIKit.h>

@interfaceNewFeatureViewController:UIViewController
//定义一个block作为成员变量,点击开始按钮时,初始化主控制器,让其成为窗口的根控制器
//block用copy
@property(nonatomic,copy)void(^startBlock)(BOOLisShare);
@end

NewFeatureViewController.m

//
//NewFeatureViewController.m
//20_帅哥no微博
//
//Createdbybeyondon14-8-3.
//Copyright(c)2014年com.beyond.Allrightsreserved.
//只使用一次,版本新特性控制器,在第一次运行本版本时启用
/*
写在前面:
当一个控件不显示的时候,检查下面三个属性:
没有宽度和高度
xy坐标不正确
没有添加到父控件中
当一个控制不能点击的时候,检查下面个属性:
自己的userinteraction=no
父控件的userinteraction=no
控件本身已经超出了它所在的控制器范围
pageController的高度不能更改,那么就可以置高度为0,其他控件同理

4,居中显示的标准步骤:先设置center,再设置bounds

5,切换按钮图片可以通过切换按钮的状态来完成

normal:普通
highlighted:高亮(人为长按的时候)
disabled:失效(通过代码控制)
selected:选中(通过代码控制)

*/
#import"NewFeatureViewController.h"

#definekPicNum4

#warningviewSize要改成kWinSize
#defineviewSizeself.view.bounds.size

@interfaceNewFeatureViewController()<UIScrollViewDelegate>
{
//页面指示控制器
UIPageControl*_pageControl;

//因为开启按钮的点击事件中需要分享按钮的选中状态
UIButton*_shareBtn;
}

@end

@implementationNewFeatureViewController

-(BOOL)prefersStatusBarHidden
{
//在LoadView之前还要先
NSLog(@"prefersbarhidden");
returnYES;

}

-(void)loadView
{
NSLog(@"loadview");
//新特性,让imageView成为控制器的view,然后才再ImageView上面添加一层scrollView
UIImageView*imgView=[[UIImageViewalloc]init];
//设置控制器view(即imgView)的尺寸为全屏
imgView.frame=[UIScreenmainScreen].bounds;
NSLog(@"%@",NSStringFromCGRect(imgView.frame));
//使用分类中的方法,如果是iphone5,加载-568h的图片
imgView.image=[UIImagefullScrennImageNamed:@"new_feature_background.png"];

//让控制器的view可以与用户交互
imgView.userInteractionEnabled=YES;
//直接让imgeView成为控制器的view
self.view=imgView;
}
-(void)viewDidLoad
{
[superviewDidLoad];
NSLog(@"viewdidload");

//1,调用自定义方法,加载UIScrollView,并且批量添加UIImageView,每个ImageView中放一张图片
[selfaddUIScrollView];

//2,调用自定义方法,加载UIPageControl
[selfaddUIPageControl];
}

//自定义方法,加载UIScrollView,并且批量添加UIImageView,每个ImageView中放一张图片
-(void)addUIScrollView
{
//1.加载UIScrollView,并且批量添加UIImageView,每个ImageView中放一张图片
UIScrollView*scrollView=[[UIScrollViewalloc]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.viewaddSubview:scrollView];

//2,根据索引添加kPicNum张图片排列而成的kPicNum个imageView到scrollView里面
for(inti=0;i<kPicNum;i++){
[selfaddImageViewToScrollView:scrollViewatIndex:i];
}

}
//自定义方法,加载UIPageControl
-(void)addUIPageControl
{
//1,加载UIPageControl
_pageControl=[[UIPageControlalloc]init];
//居中最好是先设置center,再设置bounds
_pageControl.center=CGPointMake(viewSize.width*0.5,viewSize.height*0.95);
_pageControl.bounds=CGRectMake(0,0,100,0);
//设置总页数
_pageControl.numberOfPages=kPicNum;
//重点~从图片中加载颜色默认颜色和当前页的颜色
_pageControl.pageIndicatorTintColor=[UIColorcolorWithPatternImage:[UIImageimageNamed:@"new_feature_pagecontrol_point.png"]];
_pageControl.currentPageIndicatorTintColor=[UIColorcolorWithPatternImage:[UIImageimageNamed:@"new_feature_pagecontrol_checked_point.png"]];
//禁止默认的交互事件
_pageControl.userInteractionEnabled=NO;
//添加到self.view即ImageView
[self.viewaddSubview:_pageControl];
}

//scrollView的代理方法,用于动态控制PageControl的当前圆点,滚动减速完毕就会调用(即scrollview静止)
-(void)scrollViewDidEndDecelerating:(UIScrollView*)scrollView
{
//当前的第几页就是偏移的x除以单张宽度
_pageControl.currentPage=scrollView.contentOffset.x/scrollView.frame.size.width;
}

//自定义方法,根据索引添加kPicNum张图片排列而成的kPicNum个imageView到scrollView里面
-(void)addImageViewToScrollView:(UIScrollView*)scrollViewatIndex:(int)i
{
//1.创建imageview
UIImageView*imageView=[[UIImageViewalloc]init];
//因为是一张张水平排列,所以根据索引计算frame,通过结构体必须强转为CGRect
imageView.frame=(CGRect){{i*viewSize.width,0},viewSize};


//2.设置图片
NSString*name=[NSStringstringWithFormat:@"new_feature_%d.png",i+1];

//使用分类中的方法,如果是iphone5,加载-568h的图片
imageView.image=[UIImagefullScrennImageNamed:name];

//3.添加
[scrollViewaddSubview:imageView];

//4.如果是最后一张图片,添加2个按钮(分享、开始)
if(i==kPicNum-1){
//必须让最后一张imageView可以进行点击,这样它里面的2个按钮才可以点击
imageView.userInteractionEnabled=YES;


//最后一张图片页面,有两个按钮,一个是开始
[selfaddStartBtnInImageView:imageView];
//最后一张图片页面,有两个按钮,另一个是分享微博按钮,默认是选中状态
[selfaddShareBtnInImageView:imageView];
}
}

//最后一张图片页面,有两个按钮,一个是分享
-(void)addShareBtnInImageView:(UIImageView*)imageView
{

//2.1.创建自定义样式的按钮
_shareBtn=[UIButtonbuttonWithType:UIButtonTypeCustom];
//添加到最后一张imageView里面
[imageViewaddSubview:_shareBtn];

//2.2.设置按钮背景图片
//调用自己写的分类方法,设置按钮正常和高亮状态的背景图片,并且返回图片的尺寸
CGSizeshareBtnNormalBgImgSize=[_shareBtnsetBtnBgImgForNormalAndSelectedWithName:@"new_feature_share_false.png"selectedName:@"new_feature_share_true.png"];

//2.3.边框(居中,先center,后bounds)
_shareBtn.center=CGPointMake(viewSize.width*0.5,viewSize.height*0.75);
//按钮宽高,就按背景图片宽高
_shareBtn.bounds=(CGRect){CGPointZero,shareBtnNormalBgImgSize};

//2.4.监听
[_shareBtnaddTarget:selfaction:@selector(shareBtnClick:)forControlEvents:UIControlEventTouchUpInside];
//2.5.高亮状态下不要改变图片颜色
_shareBtn.adjustsImageWhenHighlighted=NO;
//2.6.默认选中
_shareBtn.selected=YES;

}
//分享按钮点击事件,只要切换不同的选中状态,就可以显示不同的两张图片(正常图片是不勾选,选中状态的图片是勾选)
-(void)shareBtnClick:(UIButton*)shareBtn
{
shareBtn.selected=!shareBtn.isSelected;
}
//最后一张图片页面,有两个按钮,一个是开始
-(void)addStartBtnInImageView:(UIImageView*)imageView
{

//1.1.创建开启按钮
//使用自定义样式
UIButton*startBtn=[UIButtonbuttonWithType:UIButtonTypeCustom];
//添加到最后一张imageView里面
[imageViewaddSubview:startBtn];


//1.2.设置背景图片等个性样式
//调用自己写的分类方法,设置按钮正常和高亮状态的背景图片,并且返回图片的尺寸
CGSizestartBtnBgImgSize=[startBtnsetBtnBgImgForNormalAndHighightedWithName:@"new_feature_finish_button.png"];
//1.3.边框
startBtn.center=CGPointMake(viewSize.width*0.5,viewSize.height*0.85);
//按钮的宽高与背景图片的宽高一样大
startBtn.bounds=(CGRect){CGPointZero,startBtnBgImgSize};

//1.4.监听
[startBtnaddTarget:selfaction:@selector(startBtnClick)forControlEvents:UIControlEventTouchUpInside];

}

//点击开始按钮时,调用block完成,以下功能:初始化主控制器,让其成为窗口的根控制器
-(void)startBtnClick
{
//直接调用block(即另外一个类里面的一段代码来执行)
if(_startBlock){
_startBlock(_shareBtn.isSelected);
}
}

@end