iOS 界面启动时,功能新特征显示
APP新启动的时候,都会有几张新的图片滑动,才能到主的界面。现在,我们新建一个控制器,专门来处理新特性,直接上代码.
第一步:新建一个NewfeatureController
//
// HWNewfeatureController.m
//
// Created by jys on 15/3/24.
// Copyright (c) 2015年 weibo. All rights reserved.
// #import "HWNewfeatureController.h"
#import "HWTabBarViewController.h" #define HWNewfeatureCount 4 @interface HWNewfeatureController ()<UIScrollViewDelegate> @property (nonatomic,weak) UIPageControl *pageControl;
@property (nonatomic,weak) UIScrollView *scrollView; @end @implementation HWNewfeatureController - (void)viewDidLoad {
[super viewDidLoad];
//1.创建一个scrollView,显示所有的新特性图片
UIScrollView *scrollView=[[UIScrollView alloc] init];
scrollView.frame=self.view.bounds;
[self.view addSubview:scrollView];
self.scrollView=scrollView; //2.添加图片到scrollView中
CGFloat scrollW=scrollView.width;
CGFloat scrollH=scrollView.height; for (int i=; i<HWNewfeatureCount; i++) {
UIImageView *imageView=[[UIImageView alloc] init];
imageView.width=scrollW;
imageView.height=scrollH;
imageView.y=;
imageView.x=i*scrollW; //显示图片
NSString *name = [NSString stringWithFormat:@"new_feature_%d", i + ];
imageView.image=[UIImage imageNamed:name];
[scrollView addSubview:imageView]; // 如果是最后一个imageView,就往里面添加其他内容
if (i == HWNewfeatureCount - ) {
[self setupLastImageView:imageView];
}
} //3.设置scrollView的其它属性
//如果想要某个方向上不能滚动,那么这个方向对应的尺寸数值传0即可
scrollView.contentSize=CGSizeMake(scrollView.width*HWNewfeatureCount, );
scrollView.bounces=NO;//去除弹簧效应
scrollView.pagingEnabled=YES;//分页,一张一张的滚动
scrollView.showsHorizontalScrollIndicator=NO;//没有滚动条
scrollView.delegate = self; //4.添加pageController分页,展示目前看的是第几页
UIPageControl *pageControl=[[UIPageControl alloc] init];
pageControl.numberOfPages=HWNewfeatureCount;
pageControl.backgroundColor=[UIColor redColor];
pageControl.currentPageIndicatorTintColor=HWColor(, , );
pageControl.pageIndicatorTintColor=HWColor(, , );
pageControl.centerX=scrollW*0.5;
pageControl.centerY=scrollH-;
[self.view addSubview:pageControl];
self.pageControl=pageControl; // UIPageControl就算没有设置尺寸,里面的内容还是照常显示的,该控件相对特别
// pageControl.width = 100;
// pageControl.height = 50;
// pageControl.userInteractionEnabled = NO;
} //当前页面滚到哪页
-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
double page=scrollView.contentOffset.x/scrollView.width;
self.pageControl.currentPage=(int)(page+0.5);
} /**
* 初始化最后一个imageView
*
* @param imageView <#imageView description#>
*/
-(void)setupLastImageView:(UIImageView *)imageView
{
//开启交互功能
imageView.userInteractionEnabled=YES; //1.分享给大家
UIButton *shareBtn=[[UIButton alloc]init];
[shareBtn setImage:[UIImage imageNamed:@"new_feature_share_false"] forState:UIControlStateNormal];
[shareBtn setImage:[UIImage imageNamed:@"new_feature_share_true"] forState:UIControlStateSelected]; [shareBtn setTitle:@"分享给大家" forState:UIControlStateNormal];
[shareBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
shareBtn.titleLabel.font=[UIFont systemFontOfSize:];
shareBtn.width=;
shareBtn.height=;
shareBtn.centerX=imageView.width*0.5;
shareBtn.centerY=imageView.height*0.65;
// top left bottom right
shareBtn.titleEdgeInsets = UIEdgeInsetsMake(, , , );
[shareBtn addTarget:self action:@selector(shareClick:) forControlEvents:UIControlEventTouchUpInside];
[imageView addSubview:shareBtn]; //2.开始微博
UIButton *startBtn=[[UIButton alloc] init];
[startBtn setBackgroundImage:[UIImage imageNamed:@"new_feature_finish_button"] forState:UIControlStateNormal];
[startBtn setBackgroundImage:[UIImage imageNamed:@"new_feature_finish_button_highlighted"] forState:UIControlStateHighlighted];
startBtn.size=startBtn.currentBackgroundImage.size;
startBtn.centerX=imageView.width*0.5;
startBtn.centerY=imageView.height*0.75;
[startBtn setTitle:@"开始微博" forState:UIControlStateNormal];
[startBtn addTarget:self action:@selector(startClick) forControlEvents:UIControlEventTouchUpInside];
[imageView addSubview:startBtn];
//startBtn.centerX=imageView } -(void)shareClick:(UIButton *)shareBtn
{
//状态取反
shareBtn.selected=!shareBtn.isSelected;
} //开始微博
-(void)startClick
{
UIWindow *window=[UIApplication sharedApplication].keyWindow;
window.rootViewController=[[HWTabBarViewController alloc]init]; } @end
上面的代码中,需要注意的是:
开始微博,显示主界面时,请使用rootViewController来处理,如果用其它方式,新特性界面并没有销毁,留下隐患。
- (void)startClick
{
// 切换到HWTabBarController
/*
切换控制器的手段
1.push:依赖于UINavigationController,控制器的切换是可逆的,比如A切换到B,B又可以回到A
2.modal:控制器的切换是可逆的,比如A切换到B,B又可以回到A
3.切换window的rootViewController
*/
UIWindow *window = [UIApplication sharedApplication].keyWindow;
window.rootViewController = [[HWTabBarViewController alloc] init]; // modal方式,不建议采取:新特性控制器不会销毁
// HWTabBarViewController *main = [[HWTabBarViewController alloc] init];
// [self presentViewController:main animated:YES completion:nil];
}
第二步,程序启动时,判断版本号。如果版本号不一致,则显示新特性。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// 1.创建窗口
self.window = [[UIWindow alloc] init];
self.window.frame = [UIScreen mainScreen].bounds; // 2.设置根控制器
NSString *key = @"CFBundleVersion";
// 上一次的使用版本(存储在沙盒中的版本号)
NSString *lastVersion = [[NSUserDefaults standardUserDefaults] objectForKey:key];
// 当前软件的版本号(从Info.plist中获得)
NSString *currentVersion = [NSBundle mainBundle].infoDictionary[key]; if ([currentVersion isEqualToString:lastVersion]) { // 版本号相同:这次打开和上次打开的是同一个版本
self.window.rootViewController = [[HWTabBarViewController alloc] init];
} else { // 这次打开的版本和上一次不一样,显示新特性
self.window.rootViewController = [[HWNewfeatureViewController alloc] init]; // 将当前的版本号存进沙盒
[[NSUserDefaults standardUserDefaults] setObject:currentVersion forKey:key];
[[NSUserDefaults standardUserDefaults] synchronize];
} // 3.显示窗口
[self.window makeKeyAndVisible];
return YES;
}
iOS 界面启动时,功能新特征显示的更多相关文章
- 换了XCode版本之后,iOS应用启动时不占满全屏,上下有黑边
原因是没有Retina4对应的启动图片,解决方法很简单,就是把Retina4对应的图片给补上就只可以了
- 关于GOM引擎启动时显示:windows socket error: 在其上下文中,该请求的地址无效。 (10049), on API 'bind'
GOM启动时网管登陆器显示:windows socket error: 在其上下文中,该请求的地址无效. (10049), on API 'bind'解决方法: 重新配置引擎控制台.在配置里取消双IP ...
- 解决VirtualBox 上的XP 关机时重启 , 启动时蓝屏 ,点击电源选项蓝屏
三个问题一次性解决. 启动时的蓝屏显示错误信息是: STOP 0x000000CE (...) DRIVER_UNLOADED_WITHOUT_CANCELLING_PENDING_OPERATION ...
- Ubuntu 14.04默认以字符界面启动
在windows上跑虚拟机比较资源,特别当以图形界面启动时,如果宿主机性能不好,就相当卡. 让Ubuntu 14.04默认以字符界面启动的方法: 编辑文件:etc/default/grub 将 GR ...
- iOS启动图launchImage设置后在启动时无法显示
iOS设置启动图: 会发现运行APP不显示设置好的启动图 解决方法: 卸载之前运行的APP,检查以下配置,将LaunchScreen删除即可. 原因: launchImage 是在没有LaunchSc ...
- ios新特征 ARC详解
IOS ARC 分类: IOS ARC2013-01-17 09:16 2069人阅读 评论(0) 收藏 举报 目录(?)[+] 关闭工程的ARC(Automatic Reference Co ...
- 【iOS翻译】App启动时的响应过程
Responding to the Launch of Your App Initialize your app’s data structures, prepare your app to run, ...
- iOS 14.5 有啥新功能?Apple Watch 也能解锁 iPhone 了
转: iOS 14.5 有啥新功能?Apple Watch 也能解锁 iPhone 了 苹果今天发布了即将发布的 iOS 14.5 和 iPadOS 14.5 更新的第一个 Beta 版本,我们在其中 ...
- 探秘IntelliJ IDEA 13测试版新功能——调试器显示本地变量
IntelliJ IDEA在业界被公认为最好的Java开发平台之一,JetBrains公司将在12月正式发布IntelliJ IDEA 13版本. 现在,小编将和大家一起探秘密IntelliJ IDE ...
随机推荐
- JavaScript arguments对象详解
1. 什么是 arguments MDN 上解释: arguments 是一个类数组对象.代表传给一个function的参数列表. 我们先用一个例子直观了解下 JavaScript 中的 argume ...
- Android 基于 Speex 的高度封装语音库,0 耦合,没三方jar包
作者:林冠宏 / 指尖下的幽灵 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:http://www.cnblogs.com/linguan ...
- Microsoft Office Enterprise 2007 在安装过程中出错的解决方法
今天笔者在使用PowerPoint 2007打开一个ppt的内嵌的excel表格时报如下错误: 无法找到 服务器应用程序.源文件.和项目,或返回的未知错误.请重新安装服务程序 然后就先把ppt文件发给 ...
- 基础笔记1(进制,浮点,递归,floor,round和ceil)
1,进制默认是十进制 0开头 8进制 0x 16进制 0b 2进制 2,long 的范围是19位数字.int范围是21亿左右,short 是三万二千左右. 超过int范围的long类型 ...
- python标准库和第三方库的区别
1.python的标准库是随着pyhon安装的时候默认自带的库. 2.python的第三方库,需要下载后安装到python的安装目录下,不同的第三方库安装及使用方法不同. 3.它们调用方式是一样的,都 ...
- python 读取一个目录下的所有目录和文件
#!/usr/bin/python # -*- coding:utf8 -*- import os allFileNum = 0 def printPath(level, path): global ...
- 掌握新变革,解密新趋势|msup第29届MPD软件管理工作坊成功召开
由msup主办的第29届MPD软件管理工作坊于7月9日-7月10日在北京国家会议中心举行,25位一线讲师,近500名软件研发工作者共同探讨软件研发与科技发展趋势. 随着移动互联网的发展,软件开发行业的 ...
- Pyplot tutorial,Pyplot官方教程自翻译
matplotlib.pyplot is a collection of command style functions that make matplotlib work like MATLAB ...
- CSU 1803 - 2016 - [同余]
题目链接:http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1803 给出正整数 n 和 m,统计满足以下条件的正整数对 (a,b) 的数量: 1. ...
- 江南大学第三届程序设计竞赛K题 - Cun Tou Gaming - [贪心+堆]
描述 CTG(Cun Tou Gaming) 是我校的一支 LOL 战队,他们参加比赛总是可以拿到冠军,因为每次都只有他们一支队伍参赛,所以只需要去签个到就可以直接夺冠并领取奖金.现在有 n 场比赛 ...