pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

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 <UIKit/UIKit.h>

@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 ()<UIScrollViewDelegate>
{
  // 頁面指示控制器
  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<kPicNum; i++) {
    [self addImageViewToScrollView:scrollView atIndex:i];
  }

}
// 自定義方法,加載UIPageControl
- (void) addUIPageControl
{
  // 1,加載UIPageControl
  _pageControl = [[UIPageControl alloc] 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 = [UIColor colorWithPatternImage:[UIImage imageNamed:@"new_feature_pagecontrol_point.png"]];
  _pageControl.currentPageIndicatorTintColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"new_feature_pagecontrol_checked_point.png"]];
  // 禁止默認的交互事件
  _pageControl.userInteractionEnabled = NO;
  // 添加到self.view即ImageView
  [self.view addSubview:_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 *)scrollView atIndex:(int)i
{
  // 1.創建imageview
  UIImageView *imageView = [[UIImageView alloc] init];
  // 因為是一張張水平排列,所以根據索引計算 frame ,通過結構體必須強轉為CGRect
  imageView.frame = (CGRect){{i * viewSize.width, 0} , viewSize};
  
  
  // 2.設置圖片
  NSString *name = [NSString stringWithFormat:@"new_feature_%d.png", i + 1];

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

// 最后一張圖片頁面,有兩個按鈕,一個是分享
- (void) addShareBtnInImageView:(UIImageView *)imageView
{
  
  // 2.1.創建自定義樣式的按鈕
  _shareBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  // 添加到最后一張imageView里面
  [imageView addSubview:_shareBtn];
  
  // 2.2.設置按鈕背景圖片
  // 調用自己寫的分類方法,設置按鈕正常和高亮狀態的背景圖片,并且返回 圖片的尺寸
  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.監聽
  [_shareBtn addTarget:self action:@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 = [UIButton buttonWithType:UIButtonTypeCustom];
  // 添加到最后一張imageView里面
  [imageView addSubview:startBtn];
  
  
  // 1.2.設置背景圖片等個性樣式
  // 調用自己寫的分類方法,設置按鈕正常和高亮狀態的背景圖片,并且返回 圖片的尺寸
  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.監聽
  [startBtn addTarget:self action:@selector(startBtnClick) forControlEvents:UIControlEventTouchUpInside];
  
}

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

@end

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

這篇文章主要介紹了ios實現文件對比的方法,主要是用到了filemanager,有需要的小伙伴可以參考下。
這篇文章主要給大家匯總了一下ios下移動文件方法,從簡單到復雜,十分的實用,有需要的小伙伴可以參考下。
本文給大家總結了幾則在IOS系統下刪除文件的代碼,十分的實用,有需要的小伙伴可以參考下。
本文給大家分享的是IOS開發中遇到的一個手風琴特效無法正常工作的問題的解決方法,經過度娘了很久才找到解決方法,這里推薦給大家,有需要的小伙伴可以參考下。
這篇文章主要介紹了iOS、Mac OS X系統中編程實現漢字轉拼音的方法(超級簡單),本文講解的方法不僅支持中文,還支持日文、韓文等,需要的朋友可以參考下
這篇文章主要分享了iOS7 毛玻璃特效代碼,非常的實用,做IOS開發的童鞋們不要錯過了
主站蜘蛛池模板: 不锈钢监控杆_监控立杆厂家-廊坊耀星光电科技有限公司 | 全屋整木定制-橱柜,家具定制-四川峨眉山龙马木业有限公司 | (中山|佛山|江门)环氧地坪漆,停车场地板漆,车库地板漆,聚氨酯地板漆-中山永旺地坪漆厂家 | 泰国试管婴儿_泰国第三代试管婴儿_泰国试管婴儿费用/多少钱_孕泰来 | 托盘租赁_塑料托盘租赁_托盘出租_栈板出租_青岛托盘租赁-优胜必达 | 镀锌钢格栅_热镀锌格栅板_钢格栅板_热镀锌钢格板-安平县昊泽丝网制品有限公司 | 头条搜索极速版下载安装免费新版,头条搜索极速版邀请码怎么填写? - 欧远全 | 在线浊度仪_悬浮物污泥浓度计_超声波泥位计_污泥界面仪_泥水界面仪-无锡蓝拓仪表科技有限公司 | Copeland/谷轮压缩机,谷轮半封闭压缩机,谷轮涡旋压缩机,型号规格,技术参数,尺寸图片,价格经销商 CTP磁天平|小电容测量仪|阴阳极极化_双液系沸点测定仪|dsj电渗实验装置-南京桑力电子设备厂 | 步进_伺服_行星减速机,微型直流电机,大功率直流电机-淄博冠意传动机械 | 撕碎机_轮胎破碎机_粉碎机_回收生产线厂家_东莞华达机械有限公司 | 河南包装袋厂家_河南真空袋批发价格_河南服装袋定制-恒源达包装制品 | 脱硫搅拌器厂家-淄博友胜不锈钢搅拌器厂家| 氢氧化钙设备, 氢氧化钙生产线-淄博惠琛工贸有限公司 | 聚氨酯催化剂K15,延迟催化剂SA-1,叔胺延迟催化剂,DBU,二甲基哌嗪,催化剂TMR-2,-聚氨酯催化剂生产厂家 | 送料机_高速冲床送料机_NC伺服滚轮送料机厂家-东莞市久谐自动化设备有限公司 | 鲁尔圆锥接头多功能测试仪-留置针测试仪-上海威夏环保科技有限公司 | 裹包机|裹膜机|缠膜机|绕膜机-上海晏陵智能设备有限公司 | 油冷式_微型_TDY电动滚筒_外装_外置式电动滚筒厂家-淄博秉泓机械有限公司 | 湖州织里童装_女童男童中大童装_款式多尺码全_织里儿童网【官网】-嘉兴嘉乐网络科技有限公司 | 全自动变压器变比组别测试仪-手持式直流电阻测试仪-上海来扬电气 | 高清视频编码器,4K音视频编解码器,直播编码器,流媒体服务器,深圳海威视讯技术有限公司 | 硅胶布|电磁炉垫片|特氟龙胶带-江苏浩天复合材料有限公司 | 东莞爱加真空科技有限公司-进口真空镀膜机|真空镀膜设备|Polycold维修厂家 | 厌氧反应器,IC厌氧反应器,厌氧三相分离器-山东创博环保科技有限公司 | 网站制作优化_网站SEO推广解决方案-无锡首宸信息科技公司 | 齿轮减速机电机一体机_齿轮减速箱加电机一体化-德国BOSERL蜗轮蜗杆减速机电机生产厂家 | 卷筒电缆-拖链电缆-特种柔性扁平电缆定制厂家「上海缆胜」 | 淘剧影院_海量最新电视剧,免费高清电影随心观看 | 精密钢管,冷拔精密无缝钢管,精密钢管厂,精密钢管制造厂家,精密钢管生产厂家,山东精密钢管厂家 | 球形钽粉_球形钨粉_纳米粉末_难熔金属粉末-广东银纳官网 | 不锈钢法兰-碳钢法兰-法兰盘生产加工厂家-[鼎捷峰]-不锈钢法兰-碳钢法兰-法兰盘生产加工厂家-[鼎捷峰] | 火锅加盟_四川成都火锅店加盟_中国火锅连锁品牌十强_朝天门火锅【官网】 | 培训一点通 - 合肥驾校 - 合肥新亚驾校 - 合肥八一驾校 | 合肥礼品公司-合肥礼品定制-商务礼品定制公司-安徽柏榽商贸有限公司 | 金环宇|金环宇电线|金环宇电缆|金环宇电线电缆|深圳市金环宇电线电缆有限公司|金环宇电缆集团 | 兰州UPS电源,兰州山特UPS-兰州万胜商贸 | 【法利莱住人集装箱厂家】—活动集装箱房,集装箱租赁_大品牌,更放心 | 越南专线物流_东莞国际物流_东南亚专线物流_行通物流 | 低合金板|安阳低合金板|河南低合金板|高强度板|桥梁板_安阳润兴 北京租车牌|京牌指标租赁|小客车指标出租 | PC构件-PC预制构件-构件设计-建筑预制构件-PC构件厂-锦萧新材料科技(浙江)股份有限公司 |