集成Facebook和Twitter的Model动画-b

这个动画。  感谢大神分享

JPPopPresentAnimation.gif

要实现这个功能分两步走:第一步,先实现这个动画。第二步,0行代码集成到项目。也就是,你不用改原有项目的任何代码,只要把写好的动画代码拖进项目,以后所有的Model就拥有这个动画了。

  - (void)presentViewController:(UIViewController *)viewControllerToPresent animated: (BOOL)flag completion:(void (^ __nullable)(void))completion

好,准备好了吗?现在开始。

第一步:先实现这个动画

  • 首先我们来分析一下这个动画,这个动画就是在Model的时候拿到当前控制器的View,然后在Model的过程中将这个View的尺寸缩小。然后在Dismiss的时候拿到这个View,将它尺寸恢复成原有的大小。就这么多了。
  • 怎么在model动画中拿到当前的控制器的View?这个很简单,只要你设置动画样式为自定义,并且成为弹出动画的代理,就像这样:
    self.modalTransitionStyle = UIModalPresentationCustom;
    viewControllerToPresent.transitioningDelegate = self;

    然后在代理方法中,会询问转场动画的提供者,此时,你再去新建一个JPTransitionManager作为转场动画的提供者。

    // 询问转场动画的提供者
    - (nullable id <UIViewControllerAnimatedTransitioning>)animationControllerForPresentedController:(UIViewController *)presented presentingController:(UIViewController *)presenting sourceController:(UIViewController *)source;
    
    - (nullable id <UIViewControllerAnimatedTransitioning>)animationControllerForDismissedController:(UIViewController *)dismissed;
  • 在这个转场动画的提供者里,我们继承NSObject,然后遵守
    UIViewControllerAnimatedTransitioning协议,然后实现协议中这两个方法:
    - (NSTimeInterval)transitionDuration:(nullable id <UIViewControllerContextTransitioning>)transitionContext;
    
    - (void)animateTransition:(id <UIViewControllerContextTransitioning>)transitionContext;

    第一个方法是询问动画的时长的。第二个方法中我们可以拿到准备做Model动画的上下文transitionContext,在上下文中我们就可以通过:UITransitionContextFromViewControllerKey和UITransitionContextToViewControllerKey两个key拿到当前的控制器和即将弹出的控制器。

  • 控制器都拿到了,我们就可以拿到控制器对应的View进行动画了。

第二步:0行代码集成到项目

为什么要强调0行代码集成到项目?

  • 刚开始写代码的时候,项目老大并没有说要这个动画,你项目都快结束了,他说这个动画挺好,我们也做一个吧(程序员转过身:XXX脏话)。这个时候你已经写了几百个Model动画的代码了,你不可能一个一个去找去改吧?
  • 几百行你改完了,你以为终于完事了,这件事就过去了,结果产品经理一个月以后又跑过来说,这个功能我们还是砍掉吧。(程序员大声:XXXXXX很脏的话)。

所以,这个时候低耦合易集成就显得特别重要。

为了处理这样的需求,所以采用hook方案,结合runtime来解决。hook就是钩子的意思。

  • 我们要用这个钩子把系统所有的Model动画的实现都钩出来,然后再把我们自己写的pop动画也给钩出来。
  • 然后再运用动态方法交换,将这系统的Model动画和自己的pop动画的实现相互替换。
  • 所以以后,我们再调用系统的Model动画的时候,实际上会去方法实现里找我们自己的pop动画去执行。这也就是为什么可以0行代码集成这个功能的原因。
  • 也有可能我们在某些情况下不需要pop动画,比如说照片浏览器。这种情况很少,所以你只需要写很少的代码,去调用我们自己的pop动画。当调用我们自己的pop动画的时候,我们的钩子会去找系统的Model动画去执行。

思路就到这里了,具体的实现细节,还需要您自己去Github下载 demo

文/NewPan(简书作者)
原文链接:http://www.jianshu.com/p/910d7825f06a
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

时间: 2024-09-30 14:48:20

集成Facebook和Twitter的Model动画-b的相关文章

Android Facebook和Twitter登录和分享完整版

最近公司的软件需要改国际版,需要Facebook和Twitter的登录和分享. 本人先用Umeng的第三方社会化分享实现了该功能,但是后来一想问题来了,经过查证.Umeng只在中国和美国有服务器,那也就是说别的国家的人如果用该产品登录和分享可不就成了摆设,这下苦逼了,然后就又重新推倒重来,索性用官方的facebook和twitter来实现登录和分享.具体步骤: 第一,因为中国政府各种坑比墙国外的服务器,导致facebook和twitter访问不了,那第一步就需要FQ,顺便FQ看看苍老师什么的,,

Android Facebook和Twitter分享

1. 背景 在年初的时候,公司的项目有个新的需求,在英文版的应用中加入Facebook和Twitter分享功能. 2. 完成情况 由于这个项目比较急,所以开发这个功能从预研到接入总共耗时一周.后来,在发了第一个英文正式版之后,在时间不是那么紧迫的情况下,将原来使用第三方库的Twitter分享,进行了重写,替换为Twitter官方SDK接入功能,耗时一周,所以从一开始的预研到最终定稿,总共花费时间两周. 3. 预研与接入 3.1 Facebook 在预研Facebook的时候,在我印象中,好像没有

国外热门网站的分享功能实现:facebook,twitter,google+1,tumblr等

最近需要做一个有关国外这几个网站的分享功能,本来以为会和weibo,空间等一样的麻烦,什么appkey啦,apptoken啦,api啦.结果很意外的发现没那么恼火. 推特分享: https://twitter.com/intent/tweet?original_referer=http://www.microvolts.com/&text=MicroVolts%20Surge%20-%20Online%20Toy%20Shooter&tw_p=tweetbutton&url=htt

分享前端Facebook及Twitter第三方登录

最近公司要求做海外的第三方登录:目前只做了Facebook和Twitter;国内百度到的信息太少VPN FQ百度+Google了很久终于弄好了.但是做第三方登录基本上都有个特点就是引入必须的js,设置appkey/appId;然后调用登录方法即可得到用户信息. 首先Facebook: 1).在Facebook开发者平台注册自己的application:然后得到appid和应用密钥: 2).接下来就异步引用Facebook的sdk.js并调用初始化方法: 1 window.fbAsyncInit

Android 集成FaceBook实现第三方登陆

一,必要准备: 上面是官方英文文档,下面详细解释一下: Facebook app : 即需要在Facebook Developer平台,创建自己的App, Facebook SDk: 添加Facebook SDK到自己的项目中, Facebook App ID: 需要得到在Facebook Developer平台创建的App 的ID. Android Key Hash: 得到Android Hash Key. Facebook Activity: 将FaceBook Activity包含在你的项

关于Facebook、twitter、google、pinterest四种分享方法,附带微博、QQ、微信、豆瓣等等

常用的国外网站分享推过,Facebook.twitter.google.pinterest这四种社交平台最常见,下面就简单介绍一下分享的方法. 首先,必须使用分享插件,share.js 获取方法: https://github.com/chenpenggood/share.js 这有两种分享文件:1.关于Facebook.twitter.google.pinterest四种分享方法, 简洁版,容量小 2.jQuery分享插件jquery.share.js享到QQ.微信.微博.google.in.

Android 应用程序集成FaceBook 登录及二次封装

1.首先在Facebook 开发者平台注册一个账号 https://developers.facebook.com/ 开发者后台  https://developers.facebook.com/apps 2.创建账号并且获得 APP ID 图一 图二 图三 图四 图五 3.获取app签名的Key Hashes 值(两种方式) 3.1方法1: 1 package com.pegasus.map.presentation.utils; 2 import android.content.Contex

iOS友盟分享--集成Facebook官方SDK

一直用的友盟分享,最近客户提了个新需求要求可以分享到Facebook  想到友盟就有FB分享 万分激动啊.. 但是测试后发现 友盟的Facebook 两种都存在一定问题.. 第一种   使用系统自带Facebook需要先在手机上设置Facebook账号 优点:这种分享简单 不需要配置Facebook AppID 缺点:继承了系统Facebook 不能预填写分享内容的特点(一般的app分享内容是要预填写的  怎么着也得王婆卖瓜对不对..所以这个缺点很致命); 第二种:使用应用内网页分享 (这种分享

android应用集成facebook登录

之前都是做国内的应用开发,没有用过国外的三方登录,比如谷歌登录.facebok登录,最近参与了一个海外的支付相关的项目,调研了一下谷歌登录和facebook登录,其实调研之后觉得也是很简单的,尤其是facebook登录,跟国内的三方登录集成几乎没有什么差别. 下面说说facebok登录的集成流程吧: 首先 你需要在facebook开发者官网上面注册一个开发者账号(如果你有facebook账号的话也是可以的),网址为:developers.facebook.com,下面就是官网的页面: 在页面的右