Origami练习生II:Swipe实现右滑返回

   Origami官网Demo练习,Swipe Patch实现iOS的原生交互—右滑返回,Hit Patch动态区域模拟点触,Publish Port传送门。


  继续官网第三个Demo,主要练习Swipe Patch的使用。练习的交互场景是点触进入界面然后右滑返回,右滑返回可以说是个很原生的操作,在demo中做了一点视觉上的优化。

  在滑动的这个场景中,核心交互是Feed和Detail这两个界面的切换,Feed界面里有零散的界面元素,所以在切换的过程中,一定是一个整体参与变化。动画可以分解为两个部分实现: 一是点击Feed中的图片,对应的Detail从右侧滑入,同时Feed缩小状淡出;二是在D界面右滑划出,F界面放大状淡入。在这个过程中变化的参数有F界面的Scale、Opacity和D界面的X Position,而且是同时变化。

  为了改变X Position,可以用到的Patch有Scroll和Swipe,Scroll在上次练习中用于控制Feed的Y Position,Scroll虽然可以Scroll Paging,一次滚动一屏幕的宽度,但是Swipe更加符合场景下的用户习惯。Swipe Patch,入口参数中有起始位置,可以控制回到起点和到达终点,尤其是Jump To Start很适合右滑返回这个操作,出口参数Position选择是水平还是竖直方向。所以利用Swipe去控制F界面的Scale和Opacity和D界面的Y Position,在这之前应该先把F界面Group,组合后Viewer中的界面黑掉了,是因为这个Group没有对应Layer,在Image上悬停按L键接入一个Layer Patch,正好可以利用黑色底做F界面的淡入淡出,然后分别连接好控制关系就可以实现左滑右滑了,但是呢会出现一个问题,因为给F界面在左滑右滑的时有Scale,在D界面还没有滑出来之前执行左滑会使F界面Scale,因为在左滑时,Scale Transiiton Patch的Process会从1开始变大,这个变大的值会直接影响F界面的Scale值,这不是我们想看到的结果,处理这个问题可以借鉴上次练习中的Range,在Transition的下一级接一个Range Patch,将Scale控制到约等于1,这个地方是官方的Tutorial里面没有提到的,算是一个小创新吧。

  搭好了Swipe模块,在进入和返回的过场中能调用。入场的时候是点按F界面上的图片,需要使用一块虚拟区域覆盖在图片上方来模拟点触事件,使用Hit Area来实现,H是一个特殊的Layer,Status Mode可以控制区域的可见性,有自己独立的Position,而模拟要求这块区域和真实区域有相同的位置,所以要把它们俩放在同一个坐标体系下,方便的做法是把Feed Image Layer和Hit Area组合起来,两个可以一起Scroll。

  因为组合增加了一个层级,那么H绑定的Tap事件怎么连接到控制F和D切换的Swipe Patch上呢?现在H所在的层级和Swipe所在的层级隔了两个层级,要想发生点关系还需要漂洋过海一下喽,为了节省体力,Origami提供了传送门”Publish Port”,在出口参数上悬停按P键,就可以穿越一级,在上一级的Group Layer的出口参数增加了一个穿越点,比如悬停在Interaction 2的Tap上,Port到上一级Layer右边就会多一个Tap,还可以按P继续传送到上一级,需要穿越两层就可以从Hit Area到Swipe Patch所在的层级,连接到Jump To Start就可以实现Tap图片,D界面从右侧滑入,同时F界面缩小淡出。

  整个过程就是这样,从这个小练习中可以加强动画的分解能力,尤其是分离出F和D两个核心层,动画分解的过程最好是在纸上Sketch出来,我觉得视觉化的思维在Motion Design中是很有用处的。Hit Area让我联想到写Web前端代码时候的各种绝对定位,为了兼容IE6的时候用过这种虚拟区域绝对定位的方法,学了一招传送门的技能,穿云遁地术,不过后面还有更厉害的Wireless Patch带你飞。

  PS.几个快捷键:

  返回上一层:Command+上

  进入选中层:Command+下

  飞天遁地术:悬停时 P键

  桥接空白层:悬停时 L键

  ( 快捷键官网文档有很多,慢慢记吧~ )

时间: 2024-11-05 17:32:49

Origami练习生II:Swipe实现右滑返回的相关文章

ios 系统导航条,右滑 返回 没效果

问题描述 ios 系统导航条,右滑 返回 没效果 5C 使用的是系统导航条,设置了代理,还是没用,back item 和leftitem 都试过了也没用,两个都不设置,直接用系统导航条的返回也是没用,不知道为什么?系统是7以上的 解决方案 重新启动一下电脑就行了,我的也是这样 解决方案二: 没有代码看不到问题啊 解决方案三: 重新启动(????ω????) 解决方案四: 不方便上代码吗???? 解决方案五: 就是赶快上代码就是赶快上代码就是赶快上代码

Android中SwipeBack实现右滑返回效果_Android

现在有很多App支持右滑返回,比如知乎,效果比较赞. 于是自己对Activity和Fragment进行了继承,派生出SwipeBackActivity和SwipeBackFragment,用于对这种效果的实现,也就是只要继承这两个类就可以了. 效果如下 Activity Fragment Frgament的效果实现比Activity稍微简单,因为Activity要考虑到dectorView. 支持滑动的控件SwipeLayout,核心思路就是把原有的控件添加到支持滑动的控件中,SwipeLayo

ios 滑动返回-iOS 右滑返回时将上个界面的navgationbar带到了返回后的界面

问题描述 iOS 右滑返回时将上个界面的navgationbar带到了返回后的界面 用的系统的滑动返回,在滑动返回时遇到了这种情况, navigationItem也是自定义的 解决方案 解决方案二: 解决方案三: 系统的滑动返回是在navgationcontroller上实现的.所以返回后的页面会有nav

iOS系统右滑返回全局控制方案

前言 今天有个小需求,在点击导航条上的返回按钮之前要调用某个API,并弹出UIAlertView来显示,根据用户的选项判断是否是返回还是继续留在当前控制器.举个简单的例子,当点击导航条上的左上角返回按钮时,就调用我们的API来提示是否知道,点击知道则返回,点击不知道则继续留在当前控制器. 那么问题来了,导航自带的右滑返回手势在点击系统的返回按钮时,不会没有办法处理,那是自动的,因此就要想办法改成leftBarButtonItem了,但是使用了leftBarButtonItem就没有了右滑返回手势

Android中SwipeBack实现右滑返回效果

现在有很多App支持右滑返回,比如知乎,效果比较赞. 于是自己对Activity和Fragment进行了继承,派生出SwipeBackActivity和SwipeBackFragment,用于对这种效果的实现,也就是只要继承这两个类就可以了. 效果如下 Activity Fragment Frgament的效果实现比Activity稍微简单,因为Activity要考虑到dectorView. 支持滑动的控件SwipeLayout,核心思路就是把原有的控件添加到支持滑动的控件中,SwipeLayo

Android实现类似IOS右滑返回的效果(原因分析及解决办法)

使用类库SwipeBackLayout https://github.com/Issacw0ng/SwipeBackLayout 出现的问题: 1. 主Activity返回时黑屏或者返回只是看到桌面背景而没有看到上一个Activity界面 原因: 使用滑动返回需要在Activity的额主题中声明android:windowIsTranslucent=true,而该属性是设置Activity为是否为透明主题,当主Activity采用透明主题时,由于是app Activity栈中的第一个,所以滑动返

Android右滑返回上一个界面的实现方法

Android右滑返回上一个界面的实现方法 public class BaseActivity extends Activity implements OnTouchListener { public ProgressDialog progressDialog; public String states; public RequestQueue mQueue; /** 触摸时按下的点 **/ PointF downP = new PointF(); /** 触摸时当前的点 **/ PointF

ios中带TabBar的导航控制器,自定义右滑手势返回

问题描述 ios中带TabBar的导航控制器,自定义右滑手势返回 右滑返回上一级页面时,tabBar不能紧贴着第一级页面,而是浮在最上层 解决方案 看不明白是什么情况...看不明白是什么情况...看不明白是什么情况...看不明白是什么情况...看不明白是什么情况...看不明白是什么情况...

Android NavigationController 右滑手势详解_IOS

苹果一直都在人机交互中尽力做到极致,在iOS7中,新增加了一个小小的功能,也就是这个api:self.navigationController.interactivePopGestureRecognizer.enabled = YES; 这个api功能就是在NavigationController堆栈内的UIViewController可以支持右滑手势,也就是不用点击右上角的返回按钮,轻轻在屏幕左边一滑,屏幕就会返回,随着ios设备屏幕的增大,这个小功能让手指短,拇指大和手残人士看到了福音. 这