最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

iOS開(kāi)發(fā)之路--微博新特性頁(yè)面

 更新時(shí)間:2014年08月26日 15:13:04   投稿:hebedich  
本文是IOS開(kāi)發(fā)之路系列的第三篇,主要是分享了微博新特性頁(yè)面的制作源碼,希望對(duì)大家有所幫助

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
// 應(yīng)用最先執(zhí)行的方法
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  // 1,創(chuàng)建窗口
  self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
  // 2,設(shè)置窗口的背景色
  self.window.backgroundColor = [UIColor whiteColor];
  // 3,調(diào)用自定義方法,判斷是不是第一次使用本版本的app,如果是第一次使用,則將窗口的根控制器設(shè)為了NewFeature控制器,否則 就直接讓主控制器成為了窗口的根控制器
  [self versionCodeCheck];
  // 4,讓窗口可見(jiàn)
  [self.window makeKeyAndVisible];
  return YES;
}

// 自定義方法,判斷是不是第一次使用本版本的app,如果是第一次使用,則將窗口的根控制器設(shè)為了NewFeature控制器,否則 就直接讓主控制器成為了窗口的根控制器
- (void)versionCodeCheck
{
  // 1,使用用戶偏好,從沙盒中取出舊的版本號(hào)

  NSString *oldVersionCode = [[NSUserDefaults standardUserDefaults] objectForKey:kVersionCodeKey];
  NSString *currentVersionCode = [[[NSBundle mainBundle]infoDictionary] objectForKey:kVersionCodeKey];
 
  // 根據(jù)版本號(hào)的比較結(jié)果 進(jìn)入不同的控制器
  //[self stepIntoViewController:currentVersionCode oldVersion:oldVersionCode];
  //return;
  
#warning block test -===============以下內(nèi)容,和其中調(diào)用的方法,僅用于block調(diào)用測(cè)試
  if ([currentVersionCode isEqualToString:oldVersionCode]) {
  //if(0){
    [self enterBeyondVC];
  } else {
    // 關(guān)鍵 ,并且保存版本號(hào)
    [[NSUserDefaults standardUserDefaults]setObject:currentVersionCode forKey:kVersionCodeKey];
    
    // 進(jìn)入新特性控制器
    NewFeatureViewController *newVC = [[NewFeatureViewController alloc]init];
    newVC.startBlock = ^(BOOL isSelected){
      log(@"%d",isSelected);
      [self enterBeyondVC];
    };
    self.window.rootViewController = newVC;
  }
}

#warning block test
- (void) enterBeyondVC
{
  // 1,如果進(jìn)行過(guò)Oauth授權(quán),則直接進(jìn)入主控制器,否則 進(jìn)行Oauth授權(quán)控制器
  if (1) {
    OauthViewController *oauthVC = [[OauthViewController alloc]init];
    self.window.rootViewController = oauthVC;
    return;
  }
  
  
  // 進(jìn)入主控制器
  BeyondViewController *vc =[[BeyondViewController alloc]init];
  self.window.rootViewController = vc;
}

- (void)stepIntoViewController:(NSString *)curVersion oldVersion:(NSString *)oldVersion
{
  // 比較新舊版本號(hào)
  UIViewController *rootViewController = nil;
#warning 測(cè)試新特性的view
  if ([curVersion isEqualToString:oldVersion]) {
   //  if (0){
    // 說(shuō)明不是第一次運(yùn)行,直接實(shí)例化主控制器,將主控制器設(shè)置為窗口的根控制器
    // 進(jìn)入主控制器(主界面之前 先把狀態(tài)欄,恢復(fù)) ios 7 無(wú)效
    // [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationFade];
    rootViewController = [[BeyondViewController alloc]init];
  } else {
    // 說(shuō)明是第一次運(yùn)行,進(jìn)入新特性控制器,將新特性控制器設(shè)置為窗口的根控制器,并且保存版本號(hào)
    // 進(jìn)入新特性控制器(新特性界面之前 先把狀態(tài)欄,隱藏) ios 7 無(wú)效
    // [UIApplication sharedApplication].statusBarHidden = YES;
    // [[UIApplication sharedApplication]setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
    rootViewController = [[NewFeatureViewController alloc]init];
    // 關(guān)鍵 ,并且保存版本號(hào)
    [[NSUserDefaults standardUserDefaults]setObject:curVersion forKey:kVersionCodeKey];
  }
  // 設(shè)置窗口的根控制器,為相應(yīng)的控制器
  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.
// 只使用一次,版本新特性控制器,在第一次運(yùn)行本版本時(shí)啟用

#import <UIKit/UIKit.h>

@interface NewFeatureViewController : UIViewController
// 定義一個(gè)block作為成員變量,點(diǎn)擊開(kāi)始按鈕時(shí),初始化主控制器,讓其成為窗口的根控制器
// 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.
// 只使用一次,版本新特性控制器,在第一次運(yùn)行本版本時(shí)啟用
/*
 寫(xiě)在前面:
 當(dāng)一個(gè)控件不顯示 的時(shí)候,檢查下面三個(gè)屬性:
 沒(méi)有寬度和高度
 x y 坐標(biāo)不正確
 沒(méi)有添加到父控件中
 當(dāng)一個(gè)控制不能點(diǎn)擊的時(shí)候,檢查下面?zhèn)€屬性:
 自己的userinteraction = no
 父控件的userinteraction = no
 控件本身已經(jīng)超出了它所在的控制器范圍
 pageController的高度不能更改,那么就可以置高度為0,其他控件同理
 
 4,居中顯示 的標(biāo)準(zhǔn)步驟:先設(shè)置center,再設(shè)置bounds
 
 5,切換按鈕圖片可以通過(guò)切換按鈕的狀態(tài)來(lái)完成
 
 normal:普通
 highlighted : 高亮(人為長(zhǎng)按的時(shí)候)
 disabled :失效(通過(guò)代碼控制)
 selected : 選中 (通過(guò)代碼控制)
 
 */
#import "NewFeatureViewController.h"

#define kPicNum 4

#warning viewSize 要改成kWinSize
#define viewSize self.view.bounds.size

@interface NewFeatureViewController ()<UIScrollViewDelegate>
{
  // 頁(yè)面指示控制器
  UIPageControl *_pageControl;
  
  // 因?yàn)殚_(kāi)啟按鈕的點(diǎn)擊事件中需要分享按鈕的選中狀態(tài)
  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];
  // 設(shè)置控制器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,調(diào)用自定義方法,加載UIScrollView,并且批量添加UIImageView,每個(gè)ImageView中放一張圖片
  [self addUIScrollView];
  
  // 2,調(diào)用自定義方法,加載UIPageControl
  [self addUIPageControl];
}

// 自定義方法,加載UIScrollView,并且批量添加UIImageView,每個(gè)ImageView中放一張圖片
- (void) addUIScrollView
{
  // 1.加載UIScrollView,并且批量添加UIImageView,每個(gè)ImageView中放一張圖片
  UIScrollView *scrollView = [[UIScrollView alloc] init];
  // 顯示的可視區(qū)域大小
  scrollView.frame = self.view.bounds;
  // 水平滾動(dòng)條
  scrollView.showsHorizontalScrollIndicator = NO;
  // 按可視區(qū)域進(jìn)行分頁(yè)
  scrollView.pagingEnabled = YES;
  // 滾動(dòng)的范圍
  scrollView.contentSize = CGSizeMake(kPicNum * viewSize.width, 0);
  // 代理 可以監(jiān)聽(tīng)滾動(dòng)的各類事件
  scrollView.delegate = self;
  // 添加到self.view即ImageView
  [self.view addSubview:scrollView];
  
  // 2,根據(jù)索引添加kPicNum張圖片排列而成的kPicNum個(gè)imageView到scrollView里面
  for (int i = 0; i<kPicNum; i++) {
    [self addImageViewToScrollView:scrollView atIndex:i];
  }

}
// 自定義方法,加載UIPageControl
- (void) addUIPageControl
{
  // 1,加載UIPageControl
  _pageControl = [[UIPageControl alloc] init];
  // 居中最好是先設(shè)置center,再設(shè)置bounds
  _pageControl.center = CGPointMake(viewSize.width * 0.5, viewSize.height * 0.95);
  _pageControl.bounds = CGRectMake(0, 0, 100, 0);
  // 設(shè)置總頁(yè)數(shù)
  _pageControl.numberOfPages = kPicNum;
  // 重點(diǎn)~從圖片中加載顏色 默認(rèn)顏色和當(dāng)前頁(yè)的顏色
  _pageControl.pageIndicatorTintColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"new_feature_pagecontrol_point.png"]];
  _pageControl.currentPageIndicatorTintColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"new_feature_pagecontrol_checked_point.png"]];
  // 禁止默認(rèn)的交互事件
  _pageControl.userInteractionEnabled = NO;
  // 添加到self.view即ImageView
  [self.view addSubview:_pageControl];
}

// scrollView的代理方法,用于動(dòng)態(tài)控制PageControl的當(dāng)前圓點(diǎn),滾動(dòng)減速完畢就會(huì)調(diào)用(即scrollview靜止)
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
  // 當(dāng)前的第幾頁(yè)就是偏移的x除以單張寬度
  _pageControl.currentPage = scrollView.contentOffset.x / scrollView.frame.size.width;
}

// 自定義方法,根據(jù)索引添加kPicNum張圖片排列而成的kPicNum個(gè)imageView到scrollView里面
- (void)addImageViewToScrollView:(UIScrollView *)scrollView atIndex:(int)i
{
  // 1.創(chuàng)建imageview
  UIImageView *imageView = [[UIImageView alloc] init];
  // 因?yàn)槭且粡垙埶脚帕?所以根據(jù)索引計(jì)算 frame ,通過(guò)結(jié)構(gòu)體必須強(qiáng)轉(zhuǎn)為CGRect
  imageView.frame = (CGRect){{i * viewSize.width, 0} , viewSize};
  
  
  // 2.設(shè)置圖片
  NSString *name = [NSString stringWithFormat:@"new_feature_%d.png", i + 1];

  // 使用分類中的方法,如果是iphone5,加載 -568h的圖片
  imageView.image = [UIImage fullScrennImageNamed:name];
  
  // 3.添加
  [scrollView addSubview:imageView];
  
  // 4.如果是最后一張圖片,添加2個(gè)按鈕(分享、開(kāi)始)
  if (i == kPicNum - 1) {
    // 必須讓最后一張imageView可以進(jìn)行點(diǎn)擊,這樣它里面的2個(gè)按鈕才可以點(diǎn)擊
    imageView.userInteractionEnabled = YES;
    
    
    // 最后一張圖片頁(yè)面,有兩個(gè)按鈕,一個(gè)是開(kāi)始
    [self addStartBtnInImageView:imageView];
    // 最后一張圖片頁(yè)面,有兩個(gè)按鈕,另一個(gè)是分享微博按鈕,默認(rèn)是選中狀態(tài)
    [self addShareBtnInImageView:imageView];
  }
}

// 最后一張圖片頁(yè)面,有兩個(gè)按鈕,一個(gè)是分享
- (void) addShareBtnInImageView:(UIImageView *)imageView
{
  
  // 2.1.創(chuàng)建自定義樣式的按鈕
  _shareBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  // 添加到最后一張imageView里面
  [imageView addSubview:_shareBtn];
  
  // 2.2.設(shè)置按鈕背景圖片
  // 調(diào)用自己寫(xiě)的分類方法,設(shè)置按鈕正常和高亮狀態(tài)的背景圖片,并且返回 圖片的尺寸
  CGSize shareBtnNormalBgImgSize = [_shareBtn setBtnBgImgForNormalAndSelectedWithName:@"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.監(jiān)聽(tīng)
  [_shareBtn addTarget:self action:@selector(shareBtnClick:) forControlEvents:UIControlEventTouchUpInside];
  // 2.5.高亮狀態(tài)下不要改變圖片顏色
  _shareBtn.adjustsImageWhenHighlighted = NO;
  // 2.6.默認(rèn)選中
  _shareBtn.selected = YES;
  
}
// 分享按鈕點(diǎn)擊事件,只要切換不同的選中狀態(tài),就可以顯示不同的兩張圖片(正常圖片是不勾選,選中狀態(tài)的圖片是勾選)
- (void)shareBtnClick:(UIButton *)shareBtn
{
  shareBtn.selected = !shareBtn.isSelected;
}
// 最后一張圖片頁(yè)面,有兩個(gè)按鈕,一個(gè)是開(kāi)始
- (void) addStartBtnInImageView:(UIImageView *)imageView
{
    
  // 1.1.創(chuàng)建開(kāi)啟按鈕
  // 使用自定義樣式
  UIButton *startBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  // 添加到最后一張imageView里面
  [imageView addSubview:startBtn];
  
  
  // 1.2.設(shè)置背景圖片等個(gè)性樣式
  // 調(diào)用自己寫(xiě)的分類方法,設(shè)置按鈕正常和高亮狀態(tài)的背景圖片,并且返回 圖片的尺寸
  CGSize startBtnBgImgSize = [startBtn setBtnBgImgForNormalAndHighightedWithName:@"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.監(jiān)聽(tīng)
  [startBtn addTarget:self action:@selector(startBtnClick) forControlEvents:UIControlEventTouchUpInside];
  
}

// 點(diǎn)擊開(kāi)始按鈕時(shí),調(diào)用block完成,以下功能:初始化主控制器,讓其成為窗口的根控制器
- (void)startBtnClick
{
  // 直接調(diào)用block (即另外一個(gè)類里面的一段代碼來(lái)執(zhí)行)
  if (_startBlock) {
    _startBlock(_shareBtn.isSelected);
  }
}

@end

相關(guān)文章

  • iOS 9 Core Spotlight搜索實(shí)例代碼

    iOS 9 Core Spotlight搜索實(shí)例代碼

    本文主要講解 iOS 9 Core Spotlight,在 IOS 開(kāi)發(fā)的時(shí)候有時(shí)候會(huì)用到搜索功能,這里給大家一個(gè)實(shí)例作為參考,有需要的小伙伴可以參考下
    2016-07-07
  • iOS 水波紋動(dòng)畫(huà)的實(shí)現(xiàn)效果

    iOS 水波紋動(dòng)畫(huà)的實(shí)現(xiàn)效果

    本篇文章主要介紹了iOS 水波紋的實(shí)現(xiàn)的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01
  • iOS10適配問(wèn)題收集整理

    iOS10適配問(wèn)題收集整理

    本文是小編給大家收集整理些有關(guān)iOS10適配問(wèn)題的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-09-09
  • IOS 靜態(tài)庫(kù)和Framework區(qū)別

    IOS 靜態(tài)庫(kù)和Framework區(qū)別

    這篇文章主要介紹了IOS 靜態(tài)庫(kù)和Framework區(qū)別的相關(guān)資料,這里對(duì)動(dòng)態(tài)庫(kù)與靜態(tài)庫(kù)做比較,選擇什么時(shí)候使用庫(kù)文件,需要的朋友可以參考下
    2016-12-12
  • ios實(shí)現(xiàn)app強(qiáng)制更新功能

    ios實(shí)現(xiàn)app強(qiáng)制更新功能

    本篇文章主要介紹了ios實(shí)現(xiàn)app強(qiáng)制更新功能,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • iOS中創(chuàng)建Model的最佳實(shí)踐記錄

    iOS中創(chuàng)建Model的最佳實(shí)踐記錄

    這篇文章主要給大家介紹了關(guān)于iOS中創(chuàng)建Model的最佳實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用iOS具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-10-10
  • iOS實(shí)現(xiàn)控制屏幕常亮不變暗的方法示例

    iOS實(shí)現(xiàn)控制屏幕常亮不變暗的方法示例

    最近在工作中遇到了要將iOS屏幕保持常亮的需求,所以下面這篇文章主要給大家介紹了關(guān)于利用iOS如何實(shí)現(xiàn)控制屏幕常亮不變暗的方法,文中給出了詳細(xì)的示例代碼,需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-10-10
  • iOS中設(shè)置圓角的幾種方法示例

    iOS中設(shè)置圓角的幾種方法示例

    這篇文章主要介紹了iOS中設(shè)置圓角的三種方法,其中包括使用layer屬性、使用繪圖設(shè)置圓角以及通過(guò)另一張mask圖創(chuàng)建新圖,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-03-03
  • iOS10最新實(shí)現(xiàn)遠(yuǎn)程通知的開(kāi)發(fā)教程詳解

    iOS10最新實(shí)現(xiàn)遠(yuǎn)程通知的開(kāi)發(fā)教程詳解

    這篇文章主要介紹了iOS10最新遠(yuǎn)程通知開(kāi)發(fā)的實(shí)現(xiàn)過(guò)程,文章先對(duì)推送通知以及遠(yuǎn)程推送通知等進(jìn)行了基本介紹,然后通過(guò)示例代碼詳細(xì)介紹了iOS10 全新遠(yuǎn)程通知的教程,有需要的朋友們可以參考借鑒,下面來(lái)一起看看吧。
    2016-09-09
  • iOS實(shí)現(xiàn)新年抽獎(jiǎng)轉(zhuǎn)盤(pán)效果的思路

    iOS實(shí)現(xiàn)新年抽獎(jiǎng)轉(zhuǎn)盤(pán)效果的思路

    這篇文章主要為大家詳細(xì)介紹了iOS實(shí)現(xiàn)抽獎(jiǎng)轉(zhuǎn)盤(pán)效果的思路,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01

最新評(píng)論

大安市| 和林格尔县| 会泽县| 宿州市| 大同市| 丰顺县| 林州市| 正定县| 波密县| 茌平县| 融水| 山东省| 南平市| 衡阳市| 志丹县| 保康县| 邵武市| 敖汉旗| 京山县| 商城县| 云林县| 平泉县| 大英县| 内丘县| 哈尔滨市| 昆明市| 新和县| 望谟县| 将乐县| 伽师县| 儋州市| 商水县| 库车县| 沐川县| 三明市| 翁牛特旗| 翼城县| 镇江市| 新丰县| 紫云| 金川县|