iOS开发——新特性OC篇&iOS9多任务处理

iOS9多任务处理

升级到iOS9的小伙伴都会发现ios9有一个非常炫酷的界面,之前使用的CollectionView实现,但是现在却给用户不一样的体验,笔者就简单研究了一下,并且找了一个小例子。

首先pod一下:

  • platform :ios, "8.0"
  • pod "iCarousel"

关于iCarousel(牛逼第三方)这里就不多说,等笔者有机会深入研究源码在分享,

然后撒野别不管,把下面的代码拷贝到你的控制器实现文件中,运行

  1 /**
  2  *  iCarousel原理
  3  *
  4  *  @param <iCarouselDelegate <iCarouselDelegate description
  5  *  @param nonatomic          nonatomic description
  6  *  @param strong             strong description
  7  *
  8  *  @return
  9  */
 10
 11 /*
 12 iCarousel并不是一个UIScrollView 也并没有包含任何UIScrollView作为subView
 13 iCarousel通过UIPanGestureRecognizer来计算和维护scrollOffset这个变量
 14 iCarousel通过scrollOffset来驱动整个动画过程
 15 iCarousel本身并不会改变itemView的位置 而是靠修改itemView的layer.transform来实现位移和形变
 16 */
 17
 18 #import "iCocosController.h"
 19
 20 #import <iCarousel.h>
 21
 22 @interface iCocosController ()<iCarouselDelegate,iCarouselDataSource>
 23
 24 @property (nonatomic, strong) iCarousel *carousel;
 25 @property (nonatomic, assign) CGSize cardSize;
 26
 27 @end
 28
 29 @implementation iCocosController
 30
 31 - (void)viewDidLoad {
 32     [super viewDidLoad];
 33
 34     CGFloat cardWidth = [UIScreen mainScreen].bounds.size.width*5.0f/7.0f;
 35     self.cardSize = CGSizeMake(cardWidth, cardWidth*16.0f/9.0f);
 36     self.view.backgroundColor = [UIColor blackColor];
 37
 38     self.carousel = [[iCarousel alloc] initWithFrame:[UIScreen mainScreen].bounds];
 39     [self.view addSubview:self.carousel];
 40     self.carousel.delegate = self;
 41     self.carousel.dataSource = self;
 42     self.carousel.type = iCarouselTypeCustom;
 43     self.carousel.bounceDistance = 0.2f;
 44 }
 45
 46
 47 - (NSInteger)numberOfItemsInCarousel:(iCarousel *)carousel
 48 {
 49     return 15;
 50 }
 51 - (CGFloat)carouselItemWidth:(iCarousel *)carousel
 52 {
 53     return self.cardSize.width;
 54 }
 55 - (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSInteger)index reusingView:(UIView *)view
 56 {
 57     UIView *cardView = view;
 58
 59     if ( !cardView )
 60     {
 61         cardView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.cardSize.width, self.cardSize.height)];
 62
 63         UIImageView *imageView = [[UIImageView alloc] initWithFrame:cardView.bounds];
 64         [cardView addSubview:imageView];
 65         imageView.contentMode = UIViewContentModeScaleAspectFill;
 66         imageView.backgroundColor = [UIColor whiteColor];
 67
 68         cardView.layer.shadowPath = [UIBezierPath bezierPathWithRoundedRect:imageView.frame cornerRadius:5.0f].CGPath;
 69         cardView.layer.shadowRadius = 3.0f;
 70         cardView.layer.shadowColor = [UIColor blackColor].CGColor;
 71         cardView.layer.shadowOpacity = 0.5f;
 72         cardView.layer.shadowOffset = CGSizeMake(0, 0);
 73
 74         CAShapeLayer *layer = [CAShapeLayer layer];
 75         layer.frame = imageView.bounds;
 76         layer.path = [UIBezierPath bezierPathWithRoundedRect:imageView.bounds cornerRadius:5.0f].CGPath;
 77         imageView.layer.mask = layer;
 78     }
 79
 80     return cardView;
 81 }
 82
 83 /**
 84  *  灵魂
 85  */
 86 //- (CATransform3D)carousel:(iCarousel *)carousel itemTransformForOffset:(CGFloat)offset
 87
 88 //- (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSInteger)index reusingView:(UIView *)view
 89 //{
 90 //    UIView *cardView = view;
 91 //
 92 //    if ( !cardView )
 93 //    {
 94 //        cardView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.cardSize.width, self.cardSize.height)];
 95 //
 96 //        ...
 97 //        ...
 98 //
 99 //        //添加一个lbl
100 //        UILabel *lbl = [[UILabel alloc] initWithFrame:cardView.bounds];
101 //        lbl.text = [@(index) stringValue];
102 //        [cardView addSubview:lbl];
103 //        lbl.font = [UIFont boldSystemFontOfSize:200];
104 //        lbl.textAlignment = NSTextAlignmentCenter;
105 //    }
106 //
107 //    return cardView;
108 //}
109
110 - (CATransform3D)carousel:(iCarousel *)carousel itemTransformForOffset:(CGFloat)offset baseTransform:(CATransform3D)transform
111 {
112     NSLog(@"%f",offset);
113
114 //    return transform;
115 //    return CATransform3DTranslate(transform, offset * self.cardSize.width, 0, 0);
116     CGFloat scale = [self scaleByOffset:offset];
117     CGFloat translation = [self translationByOffset:offset];
118
119 //    return CATransform3DScale(CATransform3DTranslate(transform, translation * self.cardSize.width, 0, 0), scale, scale, 1.0f);
120     return CATransform3DScale(CATransform3DTranslate(transform, translation * self.cardSize.width, 0, offset), scale, scale, 1.0f);
121 }
122 - (void)carouselDidScroll:(iCarousel *)carousel
123 {
124     for ( UIView *view in carousel.visibleItemViews)
125     {
126         CGFloat offset = [carousel offsetForItemAtIndex:[carousel indexOfItemView:view]];
127
128         if ( offset < -3.0 )
129         {
130             view.alpha = 0.0f;
131         }
132         else if ( offset < -2.0f)
133         {
134             view.alpha = offset + 3.0f;
135         }
136         else
137         {
138             view.alpha = 1.0f;
139         }
140     }
141 }
142 //形变是线性的就ok了
143 - (CGFloat)scaleByOffset:(CGFloat)offset
144 {
145     return offset*0.04f + 1.0f;
146 }
147 //位移通过得到的公式来计算
148 - (CGFloat)translationByOffset:(CGFloat)offset
149 {
150     CGFloat z = 5.0f/4.0f;
151     CGFloat n = 5.0f/8.0f;
152
153     //z/n是临界值 >=这个值时 我们就把itemView放到比较远的地方不让他显示在屏幕上就可以了
154     if ( offset >= z/n )
155     {
156         return 2.0f;
157     }
158
159     return 1/(z-n*offset)-1/z;
160 }
161
162 @end

最后你会发现奇怪的现象,就是非常简单的实现了多任务

时间: 2024-10-06 00:58:42

iOS开发——新特性OC篇&iOS9多任务处理的相关文章

iOS开发——新特性OC篇&amp;IOS9 SDK新特性

iOS9 SDK新特性 WWDC 2015苹果开发者大会是移动开发者一年一度的盛会,InfoQ中文站除了第一时间整理Keynote内容分享给大家之外,还邀请了资深的一线开发者分享他们的收获.本文为王巍(@onevcat)对WWDC上透露的iOS 9 SDK新特性的总结,分享给广大的iOS开发者. 年年岁岁花相似,岁岁年年人不同.今年的 WWDC 一如既往的热闹,得益于 Apple 的随机抽选机制,这两年有更多的中国开发者有机会亲临现场进行体验,并与全球开发者取得更多的交流.更多的开发者可能只能在

iOS开发——新特性OC篇&amp;IOS9 系统新特性

IOS9 系统新特性 2015年6月89号凌晨召开的WWDC 2015苹果开发者大会发布了全新的iOS 9系统,PC6小编今天给大家整理了这次iOS9的系统更新带来了哪些新的功能与升级,本次新功能一览,我们分为iOS 9 for iPhone和iOS 9 for iPad两部分来介绍. 一.iOS 9 for iPhone 1.每周收到10亿条指令的Siri,在识别的速度和准确率上都提高了40%,Siri的功能也得到了丰富,可以用来查找图片.视频,也能让它提醒你看完网页上的文章. 2.为了体现智

iOS开发——新特性OC篇&amp;Objective新特性

Objective新特性 Overview 自 WWDC 2015 推出和开源 Swift 2.0 后,大家对 Swift 的热情又一次高涨起来,在羡慕创业公司的朋友们大谈 Swift 新特性的同时,也有很多像我一样工作上依然需要坚守着 Objective-C 语言的开发者们.今年的 WWDC 中介绍了几个 Objective-C 语言的新特性,还是在“与 Swift 协同工作”这种 Topic 里讲的,越发凸显这门语言的边缘化了,不过有新特性还是极好的,接下来,本文将介绍下面三个主要的新特性:

iOS开发——新特性OC篇&amp;Swift 2.0新特性

Swift 2.0新特性 转眼间,Swift已经一岁多了,这门新鲜.语法时尚.类型安全.执行速度更快的语言已经渐渐的深入广大开发者的心.我同样也是非常喜爱这门新的编程语言. 今年6月,一年一度的WWDC大会如期而至,在大会上Apple发布了Swift 2.0,引入了很多新的特性,以帮助开发者能更快,更简单的构建应用.我在这里也说道说道Swift 2.0中值得大家注意的新特性. guard语句 guard语句和if语句有点类似,都是根据其关键字之后的表达式的布尔值决定下一步执行什么.但与if语句不

iOS开发——新特性Swift篇&amp;Swift 2.0 异常处理

Swift 2.0 异常处理 WWDC 2015 宣布了新的 Swift 2.0. 这次重大更新给 Swift 提供了新的异常处理方法.这篇文章会主要围绕这个方面进行讨论. 如何建造异常类型? 在 iOS 开发当中,我们会面对很多异常处理.在 Cocoa Touch 中我们使用 NSError 来进行异常处理.在新的 Swift 2.0 中,我们可以使用新的 ErrorType protocol. 在 Swift 中, enum 是最好的方法建立属于你自己的异常类型,你只要在你的 enum 中确

iOS开发——技术实战OC篇&amp;使用UICollectionView实现新特性界面

使用UICollectionView实现新特性界面 关于CollectionView是一个很好用的控件,或许你还没有接触过,但是你肯定接触过UITableView,它可以实现UITableView实现不了的功能,知识UITableView使用的地方不不是很难,而CollectionView如果你只是简单的实现一些界面布局撒的很简单,但是如果涉及到比较炫酷或者比较高级的功能就需要更加深入的研究了. 今天主要是以一个新特性的界面介绍CollectionView的简单使用. 关于新特性界面在没有Col

iOS开发——新特性篇&amp;swift新特性(__nullable和__nonnull)

swift新特性(__nullable和__nonnull) 最近在看老师写代码的时候经常遇到两个陌生的关键字,但是当我在我的电脑上敲得时候就是敲不出,后来才知道这是为了swift与OC混编的时候产生的一个新特性,就很认真的研究了一下. 在swift中,可以使用!和?来表示一个对象是optional的还是non-optional,如view?和view!.而在Objective-C中则没有这一区分,view即可表示这个对象是optional,也可表示是non-optioanl. 这样就会造成一个

ios开发——实用技术篇OC篇&amp;iOS的主要框架

iOS的主要框架         阅读目录 Foundation框架为所有的应用程序提供基本系统服务 UIKit框架提供创建基于触摸用户界面的类 Core Data框架管着理应用程序数据模型 Core Graphics框架帮助你创建图形 Core Animation允许你创建高级的动画和虚拟效果 OpenGL ES 框架提供2D和3D绘图工具 将别的框架添加到工程里 本文是<Sunvey the Major Framworks>一文的翻译 框架是一个目录,这个目录包含了共享库,访问共享库里代码

iOS 开发——版本适配OC篇&amp;项目开发之系统适配问题(关于后台)

项目开发之系统适配问题 关于后台 在之前iOS 开发中,我们精彩遇到关于app适配问题,有屏幕适配,系统适配,但是由于苹果新设备(iphone 6/6p)技新术(sizeClass)的推出在屏幕适配上变的非常简单,而且之前关于app在系统适配上还是比较多的,可能是由于ios7的大改革,后面字啊iOS7盒iOS8上面的api并没有太大的差别,所以关于系统适配,我们并没有考虑太多. 但是,作为一个合格的开发者,不管是实际项目开发中,还是平时我们都要注意系统的视频,毕竟ios9又出来了,虽然常用api