leo

leo

4 posts
ios

实现iOS 9 Task Switcher动画

升级到iOS 9以后,发现新的task switcher的动画蛮有趣的,于是就动手实现了下,最终效果如下~ 思路 首先我们需要一个横向的scroll view,可以用UICollectionView,也可以自己实现一个。scroll view里每一页都是一张card,一屏5张card: | | |card card card card card| | | 其次,我们需要在scrollViewDidScroll中判断每张card距离中心的距离,根据这个值来调整它的alpha,scale以及x轴的translation。 alpha:右边的card alpha都是1,左边的越靠左alpha越小 scale: 从左往右依次变大 translation:除了中间的card,所有的card都会右偏,而为了让中间card大部分都露出来,右边的card偏移需要比左边大 开工 1. 横向滚动的scroll view 我们可以自己实现一个横向无限滚动的scroll view, 具体可以参考: http://tech.glowing.

  • leo
    leo
calendar view

GLCalendarView - a Fully Customizable Date Range Picker

GLCalendarView是Glow的第二个开源项目,虽然开源的calendar有很多,但是支持range的却很少,我们对GLCalendarView的定位是date range picker,希望它可以帮助到其他开发者~ Demo Installation CocoaPods 如果你使用cocoapods,那么只需将GLCalendarView加入PodFile pod "GLCalendarView", "~> 1.0.0" Source File 或者可以将 Sources 目录下的所有文件拷贝进项目 Usage 在storyboard里放置一个view,或者用代码创建,将view的class设置成GLCalendarView 在viewDidLoad里, 对calendar view进行一些设置,例如设置 firstDate 和 lastDate 在 viewWillAppear里, 设置需要显示的ranges,调用 [calendarView reload]

  • leo
    leo
ios

动态修改UINavigationBar的背景色

这是我们最终想要得到的效果: 思路 在UISrollView的delegate方法 - (void)scrollViewDidScroll:(UIScrollView *)scrollView中根据当前的contentOffset更新navigationBar的backgroundColor即可,so easy~ 开动 那么我们来看看apple为我们提供了哪些API来设置navigationBar的颜色。 首先想到的是最常用的[UINavigationBar appearance] ,我们一般会在AppDelegate中使用它对navigationBar进行统一的设置。但是如果试一下,会发现在scrollViewDidScrollView中调用它并不能动态地改变navigationBar的颜色,原因可以看一下Apple的doc: Use the UIAppearance protocol to get the appearance proxy for a class. You can customize the appearance of instances of a class by sending appearance

  • leo
    leo
ios

使用CADisplayLink实现果冻效果动画

CADisplayLink是什么 根据Apple的doc: A CADisplayLink object is a timer object that allows your application to synchronize its drawing to the refresh rate of the display. 比起NSTimer,CADisplayLink可以确保系统渲染每一帧的时候我们的方法都被调用,从而保证了动画的流畅性。 Demo 我们希望在animate一个view的时候给它加上果冻效果: 我们会把所有的逻辑都封装到一个BlockView里,在这个view里首先申明一个property: @property (strong, nonatomic) CADisplayLink *displayLink; 在动画开始的时候,初始化displayLink,指定tick方法: - (void)startAnimation { if (self.

  • leo
    leo