首页 > 代码库 > iOS开发项目篇—09新版本特性·分享

iOS开发项目篇—09新版本特性·分享

iOS开发项目篇—09新版本特性·分享和开始

一、ios开发中图片的加载

 图片的加载:

 [UIImage imageNamed:@"home"];  加载png图片

(一)非retina屏幕

(1)3.5 inch(320 x 480)

 * home.png

(二)retina屏幕

(1)3.5 inch(640 x 960)

 * home@2x.png

(2)4.0 inch(640 x 1136)

 * home-568h@2x.png(如果home是程序的启动图片,才支持自动加载)

(三)举例(以下情况都是系统自动加载)

(1)home是启动图片

 * iPhone 1\3G\3GS -- 3.5 inch 非retina :home.png

 * iPhone 4\4S -- 3.5 inch retina :home@2x.png

 * iPhone 5\5S\5C -- 4.0 inch retina :home-568h@2x.png

(2)home不是启动图片

 * iPhone 1\3G\3GS -- 3.5 inch 非retina :home.png

 * iPhone 4\4S -- 3.5 inch retina :home@2x.png

 * iPhone 5\5S\5C -- 4.0 inch retina :home@2x.png

(3)总结

 * home.png :3.5 inch 非retina

 * home@2x.png :retina

 * home-568h@2x.png :4.0 inch retina + 启动图片

二、分享和开始微博功能的实现

1.实现效果

        

2.实现代码

  1 //  2 //  YYNewfeatureViewController.m  3 //  06-微博版本新特性  4 //  5   6 #import "YYNewfeatureViewController.h"  7 #import "YYTabBarViewController.h"  8 #define YYNewfeatureImageCount    4  9 @interface YYNewfeatureViewController ()<UIScrollViewDelegate> 10 @property(nonatomic,strong)UIPageControl *pageControl; 11  12 @end 13  14 @implementation YYNewfeatureViewController 15  16  17 - (void)viewDidLoad 18 { 19     [super viewDidLoad]; 20     //1.添加UIScrollView 21     [self setupScrollView]; 22     //2.添加pageControl 23     [self setupPageControl]; 24 } 25 /** 26  *添加UIScrollVie 27  */ 28 -(void)setupScrollView 29 { 30     //1.添加UIScrollVie 31     //创建 32     UIScrollView *scrollView=[[UIScrollView alloc]init]; 33     //设置frame 34     scrollView.frame=self.view.bounds; 35     //设置代理 36     scrollView.delegate=self; 37     //添加到view 38     [self.view addSubview:scrollView]; 39      40     //2.添加图片 41     //设置每张图片的宽高和scrollView的一致 42     CGFloat imageW=scrollView.width; 43     CGFloat imageH=scrollView.height; 44     //添加四张图片 45     for (int i=0; i<YYNewfeatureImageCount; i++) { 46         //创建ImageView 47         UIImageView *imageView=[[UIImageView alloc]init]; 48         NSString *name=[NSString stringWithFormat:@"new_feature_%d",i+1]; 49 //        if ([UIScreen mainScreen].bounds.size.height==568.0) { 50 //            name=[name stringByAppendingString:@"-568h"]; 51 //        } 52         if (FourInch) {//需要手动去加载4英寸对应的-568h@2x图片 53             name=[name stringByAppendingString:@"-568h"]; 54         } 55         imageView.image=[UIImage imageWithName:name]; 56          57         //把ImageView添加到scrollView上 58         [scrollView addSubview:imageView]; 59          60         //设置imageView的frame 61         imageView.y=0; 62         imageView.width=imageW; 63         imageView.height=imageH; 64         imageView.x=i*imageW; 65          66         if(i==YYNewfeatureImageCount-1) 67         { 68             [self setupLastImageView:imageView]; 69         } 70     } 71     //设置其他的属性 72     //设置活动范围 73     scrollView.contentSize=CGSizeMake(YYNewfeatureImageCount*imageW, 0); 74     //设置背景颜色 75     scrollView.backgroundColor=YYColor(246, 246, 246); 76     //隐藏水平滚动条 77     scrollView.showsHorizontalScrollIndicator=NO; 78 //    scrollView.pagingEnabled=YES; 79     //去除弹簧效果 80     scrollView.bounces=NO; 81 } 82  83 /** 84  *2.添加pageControl 85  */ 86 -(void)setupPageControl 87 { 88     UIPageControl *pageControl=[[UIPageControl alloc]init]; 89     //设置一共有几页 90     pageControl.numberOfPages=YYNewfeatureImageCount; 91     //设置显示的位置 92     pageControl.centerX=self.view.width*0.5; 93     pageControl.centerY=self.view.height-30; 94     //把pageControl添加到view上 95     [self.view addSubview:pageControl]; 96      97     //设置圆点的颜色 98     //当前页的圆点的颜色 99     pageControl.currentPageIndicatorTintColor=YYColor(253, 98, 42);100     //其它叶的圆点的颜色101     pageControl.pageIndicatorTintColor=YYColor(189, 189, 189);102     self.pageControl=pageControl;103     104 }105 106 107 /**108  *  设置最后一个UIImageView,在上面添加两个按钮109  */110 -(void)setupLastImageView:(UIImageView *)imageView111 {112     //设置为可交互的113     imageView.userInteractionEnabled=YES;114     //1.添加开始微博按钮115     [self setupStarButton:imageView];116     //2.添加分享按钮117     [self setupShareButton:imageView];118 }119 120 /**121  *  开始微博按钮122  */123 -(void)setupStarButton:(UIImageView *)imageView124 {125     // 1.添加开始按钮126     UIButton *startButton = [[UIButton alloc] init];127     [imageView addSubview:startButton];128     129     // 2.设置背景图片130     [startButton setBackgroundImage:[UIImage imageWithName:@"new_feature_finish_button"] forState:UIControlStateNormal];131     [startButton setBackgroundImage:[UIImage imageWithName:@"new_feature_finish_button_highlighted"] forState:UIControlStateHighlighted];132     133     // 3.设置frame134     startButton.size = startButton.currentBackgroundImage.size;135     startButton.centerX = self.view.width * 0.5;136     //注意:这是为了适配3.5inch和4.0inch137     startButton.centerY = self.view.height * 0.8;138     139     // 4.设置文字140     [startButton setTitle:@"开始微博" forState:UIControlStateNormal];141     [startButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];142     [startButton addTarget:self action:@selector(start) forControlEvents:UIControlEventTouchUpInside];143     144 }145 -(void)start146 {147 148     //显示主控制器149     YYTabBarViewController *vc=[[YYTabBarViewController alloc]init];150     151     //切换控制器(3)152     //push(当前没有导航控制器,但是可以添加一个)153 //    [self.navigationController pushViewController:vc animated:NO];154     //modal155 //    [self presentViewController:vc animated:NO completion:Nil];156     //window.rootViewController157    // self.view.window注意,不要用这种方法去获取主窗口158     [UIApplication sharedApplication].keyWindow.rootViewController=vc;159 }160 161 /**162  *分享给大家按钮163  */164 -(void)setupShareButton:(UIImageView *)imageView165 {166     //1.创建并添加分享按钮167     UIButton *shareButton=[[UIButton alloc]init];168     [imageView addSubview:shareButton];169     170     //2.设置文字和图片等信息171     [shareButton setTitle:@"分享给大家" forState:UIControlStateNormal];172     [shareButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];173     [shareButton setImage:[UIImage imageWithName:@"new_feature_share_false"] forState:UIControlStateNormal];174     [shareButton setImage:[UIImage imageWithName:@"new_feature_share_true"] forState:UIControlStateSelected];175     //监听点击事件176     [shareButton addTarget:self action:@selector(share:) forControlEvents:UIControlEventTouchUpInside];177     178     //3.设置按钮的frame179     shareButton.size=CGSizeMake(150, 35);180     shareButton.centerX=self.view.width*0.5;181     shareButton.centerY=self.view.height*0.7;182     183     //4.设置间距184     shareButton.titleEdgeInsets=UIEdgeInsetsMake(0, 10, 0, 0);185 }186 187 -(void)share:(UIButton *)shareButton188 {189     //对状态进行取反190     shareButton.selected=!shareButton.isSelected;191 }192 #pragma mark-UIScrollViewDelegate193 -(void)scrollViewDidScroll:(UIScrollView *)scrollView194 {195 //    YYLog(@"scrollViewDidScroll----%f",scrollView.contentOffset.x);196     //拿到浮点数进行四舍五入197     double doublePage=scrollView.contentOffset.x/scrollView.width;198     int intPage=(int)(doublePage + 0.5);199     //设置当前页码200     self.pageControl.currentPage=intPage;201 202 }203 #pragma mark-隐藏状态栏204 -(BOOL)prefersStatusBarHidden205 {206     return YES;207 }208 @end

3.代码说明

(1)手动加载-568h@2x的图片

1 //        if ([UIScreen mainScreen].bounds.size.height==568.0) {2 //            name=[name stringByAppendingString:@"-568h"];3 //        }4         if (FourInch) {//需要手动去加载4英寸对应的-568h@2x图片5             name=[name stringByAppendingString:@"-568h"];6         }

宏定义:

//是否为4英寸#define FourInch ([UIScreen mainScreen].bounds.size.height==568.0)

(2)设置scrollView的细节

设置活动范围   scrollView.contentSize=CGSizeMake(YYNewfeatureImageCount*imageW, 0);

设置背景颜色   scrollView.backgroundColor=YYColor(246, 246, 246);

隐藏水平滚动条  scrollView.showsHorizontalScrollIndicator=NO;

去除弹簧效果     scrollView.bounces=NO;

(3)设置页码

 1 #pragma mark-UIScrollViewDelegate 2 -(void)scrollViewDidScroll:(UIScrollView *)scrollView 3 { 4 //    YYLog(@"scrollViewDidScroll----%f",scrollView.contentOffset.x); 5     //拿到浮点数进行四舍五入 6     double doublePage=scrollView.contentOffset.x/scrollView.width; 7     int intPage=(int)(doublePage + 0.5); 8     //设置当前页码 9     self.pageControl.currentPage=intPage;10 11 }

三、补充说明

1.关于边距的设置

原始的图片:

(1)contentEdgeInsets : 切掉按钮内部的内容,内边距=自切   被切掉的区域不能再显示内容

   shareButton.contentEdgeInsets = UIEdgeInsetsMake(10, 20, 10, 20);

  设置效果如下:

(2)titleEdgeInsets : 切掉按钮内部UILabel的内容

     shareButton.titleEdgeInsets = UIEdgeInsetsMake(10, 20, 10, 20);

设置效果如下:

(3)imageEdgeInsets : 切掉按钮内部UIImageView的内容

shareButton.imageEdgeInsets = UIEdgeInsetsMake(5, 5, 5, 5);

设置效果如下:

 

2.切换控制器

有下面三种方式可以切换控制器:

(1)设置Window的根控制器(注意这里不推荐使用通过self.view.window获取window)

  UIWindow *window = [UIApplication sharedApplication].keyWindow;

  window.rootViewController = vc;

提示:可以销毁之前的控制器,显示新的控制器

(2)使用push切换

 push : [self.navigationController pushViewController:vc animated:NO];

提示:无法销毁之前的控制器,显示新的控制器

(3)通过modal切换

 modal : [self presentViewController:vc animated:NO completion:nil];

提示:无法销毁之前的控制器,显示新的控制器

(4)三种切换方式的比较

切换之前在内存中的表现如下图所示:

说明:新特性控制器是window的根控制器,所以,新特性控制器的view此时添加到window的view上。

使用modal的方式(之前的控制器无法被销毁):

  这里的控制器切换是不可逆的,也就是说当切换之后,将不会再切换回去。也就是说新特性控制器在切换之后,就没有继续留在内存中的理由了,但是通过上图可以看出,新特性的控制器因为有强指针引用着它,所以它将不会被销毁。此方法不被推荐(使用push也不会销毁)。

四、附录

项目的pch文件

 1 #import <Availability.h> 2  3 #ifndef __IPHONE_5_0 4 #warning "This project uses features only available in iOS SDK 5.0 and later." 5 #endif 6  7 #ifdef __OBJC__ 8     #import <UIKit/UIKit.h> 9     #import <Foundation/Foundation.h>10     #import "UIImage+Extension.h"11     #import "UIBarButtonItem+Extension.h"12     #import "UIView+Extension.h"13 14 #ifdef DEBUG // 调试状态, 打开LOG功能15 #define YYLog(...) NSLog(__VA_ARGS__)16 #else // 发布状态, 关闭LOG功能17 #define YYLog(...)18 #endif19 20 // 颜色21 #define YYColor(r, g, b) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:1.0]22 23 // 随机色24 #define YYRandomColor [UIColor colorWithRed:arc4random_uniform(256)/255.0 green:arc4random_uniform(256)/255.0 blue:arc4random_uniform(256)/255.0 alpha:1.0]25 26 // 是否为iOS727 #define iOS7 ([[UIDevice currentDevice].systemVersion doubleValue] >= 7.0)28 29 //是否为4英寸30 #define FourInch ([UIScreen mainScreen].bounds.size.height==568.0)31 #endif