热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

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

本文是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


推荐阅读
  • Ulysses Mac v29:革新文本编辑与写作体验
    探索Ulysses Mac v29,这款先进的纯文本编辑器为Mac用户带来了全新的写作和编辑环境。它不仅具备简洁直观的界面,还融合了Markdown等标记语言的最佳特性,支持多种格式导出,并提供强大的组织和同步功能。 ... [详细]
  • 本文介绍了一系列针对iPhone 6s的优化方法,包括系统版本选择、内存管理、软件卸载以及特定设置调整,帮助用户改善设备的运行速度和整体性能。 ... [详细]
  • 随着iTunes界面的更新,用户发现通过该平台安装IPA文件变得不再可能。面对这一变化,除了苹果官方推荐的TestFlight外,还有哪些高效便捷的方法呢?本文将为您详细介绍几种替代方案。 ... [详细]
  • 智慧城市建设现状及未来趋势
    随着新基建政策的推进及‘十四五’规划的实施,我国正步入以5G、人工智能等先进技术引领的智慧经济新时代。规划强调加速数字化转型,促进数字政府建设,新基建政策亦倡导城市基础设施的全面数字化。本文探讨了智慧城市的发展背景、全球及国内进展、市场规模、架构设计,以及百度、阿里、腾讯、华为等领军企业在该领域的布局策略。 ... [详细]
  • 本文详细介绍了Linux操作系统中的cp和scp命令,包括它们的基本使用方法、常见选项以及如何通过scp命令安全地在不同主机之间传输文件。 ... [详细]
  • Web App vs Native App:未来的移动应用趋势
    随着移动互联网的发展,Web App和Native App之间的竞争日益激烈。对于开发者而言,选择哪一种技术路径更为明智?本文将深入探讨两种应用模式的特点及未来趋势。 ... [详细]
  • 本文介绍了如何在Linode服务器上以root用户身份安装Xubuntu,并解决尝试启动图形界面时遇到的'无屏幕找到'错误。 ... [详细]
  • 本文详细介绍了如何在iPhone 6上设置3G和4G网络的方法,包括具体的步骤和可能遇到的问题解决方案。 ... [详细]
  • 优秀的产品不仅具备强大的功能,还在细节上做到极致,这些细微之处往往是提升用户体验、增强用户黏性和市场竞争力的关键。微交互作为其中的重要组成部分,通过简洁而有效的设计,为用户提供即时反馈,增强互动体验。 ... [详细]
  • 转自:http:www.yybug.comread-htm-tid-15324.html为什么使用Twisted? 如果你并不准备使用Twisted,你可能有很多异议。为什么使用T ... [详细]
  • 本文介绍了如何在Ubuntu 16.04系统上配置Nginx服务器,以便能够通过网络访问存储在服务器上的图片资源。这解决了在网页开发中需要使用自定义在线图标的需求。 ... [详细]
  • 本文介绍了在Linux系统(特别是Ubuntu)中遇到 'bash: tailf: command not found' 错误时的正确处理方法,推荐使用 `tail -f` 命令替代 `tailf`。 ... [详细]
  • 本文详细介绍了SSH(Secure Shell)的基础知识、应用场景以及如何在不同平台上使用SSH进行安全的远程操作。文章还探讨了SSH的高级用法,如免密登录和其他安全增强措施。 ... [详细]
  • 本文介绍了如何使用SecureCRT软件通过网络远程连接和管理树莓派的方法,包括获取树莓派的IP地址、配置SecureCRT以及完成安全连接的具体步骤。 ... [详细]
  • 解决MySQL错误2002:无法建立数据库连接
    本文详细描述了在Digital Ocean服务器上托管的多个WordPress站点突然出现数据库连接错误的情况,并提供了有效的解决方案。 ... [详细]
author-avatar
小熊宝宝公寓
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有