zoukankan      html  css  js  c++  java
  • [iOS微博项目

    A.版本新特性
    1.需求
    • 第一次使用新版本的时候,不直接进入app,而是展示新特性界面
     
    NewFeature
     
     
    2.思路
    • [[NSBundle mainBundle] infoDictionary]取得当前版本号(最新版本),版本号存储在了info.plist中
    • 从preference取得上一次使用的版本号
    • 将讲个版本号进行对比,如果相同就是当前是最新版本,直接进入app;如果不相同,就进入新特性界面并保存最新版本号到preference
     
    当前版本号:
    Image(79)
     
    当前版本号的key
    Image(80)
     
     
    3.实现
    (1)创建一个新的目录来处理新特性加载
    Image(81)
     
    自定义一个集成UIViewController的类来处理新特性界面
    (注意scrollView没有相应控制器,只能在其他view上加载)
    Image(82)
     
     
    (2)在AppDelegate中app加载完毕方法中
     
     1 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
     2     // Override point for customization after application launch.
     3    
     4     // 启动后显示状态栏
     5     UIApplication *app = [UIApplication sharedApplication];
     6     app.statusBarHidden = NO;
     7    
     8     // 设置window
     9     self.window = [[UIWindow alloc] init];
    10     self.window.frame = [UIScreen mainScreen].bounds;
    11    
    12     /** 新版本特性 */
    13     // app现在的版本
    14     // 由于使用的时Core Foundation的东西,需要桥接
    15     NSString *versionKey = (__bridge NSString*) kCFBundleVersionKey;
    16     NSDictionary *infoDic = [[NSBundle mainBundle] infoDictionary];
    17     NSString *currentVersion = [infoDic objectForKey:versionKey];
    18    
    19     // 上次使用的版本
    20     NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    21     NSString *lastVersion = [defaults stringForKey:versionKey];
    22 
    23     // 如果版本变动了,存储新的版本号并启动新版本特性图
    24     if (![lastVersion isEqualToString:currentVersion]) {
    25        
    26         // 存储
    27         [defaults setObject:currentVersion forKey:versionKey];
    28         [defaults synchronize];
    29        
    30         // 开启app显示新特性
    31         HVWNewFeatureViewController *newFeatureVC = [[HVWNewFeatureViewController alloc] init];
    32         self.window.rootViewController = newFeatureVC;
    33     } else {
    34         // 创建根控制器
    35         HVWTabBarViewController *tabVC = [[HVWTabBarViewController alloc] init];
    36         self.window.rootViewController = tabVC;
    37     }
    38 
    39     [self.window makeKeyAndVisible];
    40    
    41     return YES;
    42 }
     
    BasicNewFeature
     
     
    B.版本新特性的内容
    1.需求
    • 在特特性界面使用轮播方式显示若干个界面
    • 最后一个界面提供一个分享功能和进入app功能
     
    2.思路
    • 在新特性控制器的view上加入一个全屏的scrollView
     
    3.实现
      1 //
      2 //  HVWNewFeatureViewController.m
      3 //  HVWWeibo
      4 //
      5 //  Created by hellovoidworld on 15/2/3.
      6 //  Copyright (c) 2015年 hellovoidworld. All rights reserved.
      7 //
      8 
      9 #import "HVWNewFeatureViewController.h"
     10 #import "HVWTabBarViewController.h"
     11 
     12 #define NewFeatureCount 4
     13 
     14 @interface HVWNewFeatureViewController () <UIScrollViewDelegate>
     15 
     16 @property(nonatomic, strong) UIPageControl *pageControl;
     17 
     18 @end
     19 
     20 @implementation HVWNewFeatureViewController
     21 
     22 - (void)viewDidLoad {
     23     [super viewDidLoad];
     24     // Do any additional setup after loading the view.
     25    
     26     // 添加scrollView
     27     [self setupScrollView];
     28    
     29     // 添加pageControl
     30     [self setupPageControl];
     31 }
     32 
     33 /** 添加scrollView */
     34 - (void) setupScrollView {
     35     // 创建一个scrollView
     36     UIScrollView *scrollView = [[UIScrollView alloc] init];
     37     scrollView.frame = self.view.bounds;
     38    
     39     // 添加图片
     40     for (int i=0; i<NewFeatureCount; i++) {
     41        
     42         // 获取图片
     43         NSString *featureImageName = [NSString stringWithFormat:@"new_feature_%d", i+1];
     44         UIImageView *featureImageView = [[UIImageView alloc] initWithImage:[UIImage imageWithNamed:featureImageName]];
     45        
     46         // 设置图片尺寸位置
     47         CGFloat featureWidth = self.view.width;
     48         CGFloat featureHeight = self.view.height;
     49         CGFloat featureX = featureImageView.width * i;
     50         CGFloat featureY = 0;
     51         featureImageView.frame = CGRectMake(featureX, featureY, featureWidth, featureHeight);
     52        
     53         // 如果是最后一页,加上功能按钮
     54         if (i == (NewFeatureCount - 1)) {
     55             // 为了让最后一页的的功能按钮能够生效,必须激活交互功能
     56             featureImageView.userInteractionEnabled = YES;
     57            
     58             [self addFunctionButton:featureImageView];
     59         }
     60        
     61         // 添加图片到scrollView
     62         [scrollView addSubview:featureImageView];
     63     }
     64    
     65     // 设置scrollView功能属性
     66     scrollView.userInteractionEnabled = YES;
     67     scrollView.scrollEnabled = YES; // 支持滚动
     68     scrollView.contentSize = CGSizeMake(self.view.width * NewFeatureCount, 0); // 只需要水平滚动
     69     scrollView.pagingEnabled = YES; // 支持分页
     70     scrollView.showsHorizontalScrollIndicator = NO; // 隐藏水平滚动条
     71    
     72     // 设置背景色
     73     scrollView.backgroundColor = [UIColor colorWithRed:246/255.0 green:246/255.0 blue:246/255.0 alpha:1.0];
     74    
     75     // 设置代理
     76     scrollView.delegate = self;
     77    
     78     // 添加
     79     [self.view addSubview:scrollView];
     80 }
     81 
     82 /** 添加pageControl */
     83 - (void) setupPageControl {
     84     // pageControl不能加在scrollView上,不然会随着内容一起滚动
     85     UIPageControl *pageControl = [[UIPageControl alloc] init];
     86     pageControl.pageIndicatorTintColor = [UIColor blackColor];
     87     pageControl.currentPageIndicatorTintColor = [UIColor redColor];
     88     pageControl.numberOfPages = NewFeatureCount;
     89    
     90     // 设置位置
     91     pageControl.centerX = self.view.width * 0.5;
     92     pageControl.centerY = self.view.height * 0.9;
     93    
     94    
     95     self.pageControl = pageControl;
     96     [self.view addSubview:pageControl];
     97 }
     98 
     99 #pragma mark - UIScrollViewDelegate
    100 /** scrollView滚动代理方法,在这里控制页码指示器 */
    101 - (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    102     // 四舍五入,让图片滚动超过中线的时候改变页码
    103     self.pageControl.currentPage = scrollView.contentOffset.x / scrollView.width + 0.5;
    104 }
    105 
    106 #pragma mark - 最后一页的功能
    107 /** 添加功能按钮 */
    108 - (void) addFunctionButton:(UIImageView *) imageView {
    109     // 添加"分享"选项按钮
    110     [self addShareButton:imageView];
    111    
    112     // 添加"进入微博"按钮
    113     [self addEnterWeiboButton:imageView];
    114 }
    115 
    116 /** 分享选项按钮 */
    117 - (void) addShareButton:(UIImageView *) imageView  {
    118     // 创建按钮
    119     UIButton *shareButton = [UIButton buttonWithType:UIButtonTypeCustom];
    120    
    121     [shareButton setTitle:@"分享给大家" forState:UIControlStateNormal];
    122    
    123     [shareButton setImage:[UIImage imageWithNamed:@"new_feature_share_false"] forState:UIControlStateNormal];
    124     [shareButton setImage:[UIImage imageWithNamed:@"new_feature_share_true"] forState:UIControlStateSelected];
    125    
    126    
    127     [shareButton addTarget:self action:@selector(shareButtonClicked:) forControlEvents:UIControlEventTouchUpInside];
    128    
    129     [shareButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
    130    
    131     // 位置尺寸
    132     shareButton.size = CGSizeMake(150, 50);
    133    
    134     // 必须先设置了size,center才真的在中心,不然就是从左上角开始!!!
    135     shareButton.centerX = self.view.width * 0.5;
    136     shareButton.centerY = self.view.height * 0.65;
    137 
    138     // 设置内间距
    139     shareButton.titleEdgeInsets = UIEdgeInsetsMake(0, 10.0, 0, 0);
    140    
    141     // 添加
    142     [imageView addSubview:shareButton];
    143 }
    144 
    145 /** 分享选项点击事件方法 */
    146 - (void) shareButtonClicked:(UIButton *) button {
    147     button.selected = !button.selected;
    148 }
    149 
    150 /** “进入微博"按钮 */
    151 - (void) addEnterWeiboButton:(UIImageView *) imageView  {
    152     // 创建按钮
    153     UIButton *enterButton = [UIButton buttonWithType:UIButtonTypeCustom];
    154     enterButton.userInteractionEnabled = YES;
    155     [enterButton setBackgroundImage:[UIImage imageWithNamed:@"new_feature_finish_button"] forState:UIControlStateNormal];
    156     [enterButton setBackgroundImage:[UIImage imageWithNamed:@"new_feature_finish_button_highlighted"] forState:UIControlStateHighlighted];
    157     [enterButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
    158     [enterButton setTitle:@"进入微博" forState:UIControlStateNormal];
    159    
    160     // 位置尺寸
    161     enterButton.size = enterButton.currentBackgroundImage.size;
    162     enterButton.centerX = self.view.width * 0.5;
    163     enterButton.centerY = self.view.height * 0.8;
    164    
    165     // 监听点击
    166     [enterButton addTarget:self action:@selector(enterWeiboButtonClicked) forControlEvents:UIControlEventTouchUpInside];
    167    
    168     // 添加
    169     [imageView addSubview:enterButton];
    170 }
    171 
    172 /** “进入微博” 按钮点击 */
    173 - (void) enterWeiboButtonClicked {
    174     UIWindow *window = [UIApplication sharedApplication].keyWindow;
    175     window.rootViewController = [[HVWTabBarViewController alloc] init];
    176 }
    177 
    178 @end
     
    Image(83)
     
  • 相关阅读:
    Julia
    《风控策略笔记》之风控审批策略(三)--量化指标与策略调优
    《风控策略笔记》之风控审批策略(二)--决策引擎与策略调优
    《风控策略笔记》之风控审批策略(一)--前言与审批策略架构搭建和数据源
    schannel: next InitializeSecurityContext failed: SEC_E_ILLEGAL_MESSAGE错误
    从 kswapd0 进程CPU占用过高 到计算机内存详解
    pandas窗口函数--rolling
    请求行与相应行
    URI与URN与URL详解
    mysql索引详解
  • 原文地址:https://www.cnblogs.com/hellovoidworld/p/4270207.html
Copyright © 2011-2022 走看看