Additive属性动画
Additive属性动画

参考
http://ronnqvi.st/multiple-animations/
效果

源码
https://github.com/YouXianMing/Animations
//
// AdditiveAnimationController.m
// Animations
//
// Created by YouXianMing on 16/1/21.
// Copyright © 2016年 YouXianMing. All rights reserved.
// #import "AdditiveAnimationController.h"
#import "UIView+SetRect.h" @interface AdditiveAnimationController () @property (nonatomic, strong) CALayer *layer; @end @implementation AdditiveAnimationController - (void)setup { [super setup]; // http://ronnqvi.st/multiple-animations/ self.layer = [CALayer layer];
self.layer.frame = CGRectMake(, , , );
self.layer.backgroundColor = [UIColor redColor].CGColor;
self.layer.cornerRadius = .f;
self.layer.position = self.contentView.middlePoint;
[self.contentView.layer addSublayer:self.layer]; UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapEvent:)];
[self.contentView addGestureRecognizer:tap];
} - (void)tapEvent:(UITapGestureRecognizer *)tapGesture { CGPoint touchPoint = [tapGesture locationInView:tapGesture.view];
CGPoint differencePoint = CGPointMake(self.layer.position.x - touchPoint.x,
self.layer.position.y - touchPoint.y); CALayer *presentationLayer = self.layer.presentationLayer;
NSLog(@"%@", presentationLayer); CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];
animation.duration = .f;
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
animation.additive = true;
animation.fromValue = [NSValue valueWithCGPoint:differencePoint];
animation.toValue = [NSValue valueWithCGPoint:CGPointZero]; [CATransaction begin];
[CATransaction setDisableActions:YES];
self.layer.position = touchPoint;
[CATransaction commit]; [self.layer addAnimation:animation forKey:nil];
} @end
细节

Additive属性动画的更多相关文章
- Android动画效果之Property Animation进阶(属性动画)
前言: 前面初步认识了Android的Property Animation(属性动画)Android动画效果之初识Property Animation(属性动画)(三),并且利用属性动画简单了补间动画 ...
- Android动画效果之初识Property Animation(属性动画)
前言: 前面两篇介绍了Android的Tween Animation(补间动画) Android动画效果之Tween Animation(补间动画).Frame Animation(逐帧动画)Andr ...
- Android属性动画
这几天看郭神的博客 Android属性动画完全解析(上),初识属性动画的基本用法之后,我自己突然想实现一种动画功能,就是我们在携程网.阿里旅行等等手机APP端买火车票的时候,看到有选择城市,那么就有出 ...
- Android动画:模拟开关按钮点击打开动画(属性动画之平移动画)
在Android里面,一些炫酷的动画确实是很吸引人的地方,让然看了就赏心悦目,一个好看的动画可能会提高用户对软件的使用率.另外说到动画,在Android里面支持3种动画: 逐帧动画(Frame Ani ...
- android 帧动画,补间动画,属性动画的简单总结
帧动画——FrameAnimation 将一系列图片有序播放,形成动画的效果.其本质是一个Drawable,是一系列图片的集合,本身可以当做一个图片一样使用 在Drawable文件夹下,创建ani ...
- View动画和属性动画
在应用中, 动画效果提升用户体验, 主要分为View动画和属性动画. View动画变换场景图片效果, 效果包括平移(translate), 缩放(scale), 旋转(rotate), 透明(alph ...
- Android属性动画源代码解析(超详细)
本文假定你已经对属性动画有了一定的了解,至少使用过属性动画.下面我们就从属性动画最简单的使用开始. ObjectAnimator .ofInt(target,propName,values[]) .s ...
- ObjectAnimator属性动画应用demo
感谢慕课网--eclipse_xu 布局文件:activity_main.xml <FrameLayout xmlns:android="http://schemas.android. ...
- 使用属性动画 — Property Animation
属性动画,就是通过控制对象中的属性值产生的动画.属性动画是目前最高级的2D动画系统. 在API Level 11中添加.Property Animation号称能控制一切对象的动画,包括可见的和不可见 ...
随机推荐
- Java项目中classpath路径
1.src不是classpath, WEB-INF/classes.lib.resources才是classpath,WEB-INF/是资源目录, 客户端不能直接访问. 2.WEB-INF/class ...
- 多线程-TaskExecutor-使用Demo
BasicExecute.java package com.jef.executeTest; public abstract class BasicExecute extends Thread { @ ...
- 7-15 Square Destroyer 破坏正方形 uva1603
先是处理所有的正方形 从边长为1开始 将其边存好 满边存好 然后不断扫描正方形 并且进行拆除 直到拆完或者 步数小于等于9(启发方程 因为n小于等于5 九次足以将所有的拆完) 代码实施有很多细 ...
- redis配置新端口
为redis分配一个8888端口,操作步骤如下:1.$REDIS_HOME/redis.conf重新复制一份,重命名为redis8888.conf.2.打开redis8888.conf配置文件,找到p ...
- Wannafly挑战赛9 A - 找一找
链接:https://www.nowcoder.com/acm/contest/71/A来源:牛客网 题目描述 给定n个正整数,请找出其中有多少个数x满足:在这n个数中存在数y=kx,其中k为大于1的 ...
- SQL注入使用Django中继数据包bypassWAF
原理 本人基于文章bypassword的文章在HTTP协议层面绕过WAF所编写一款工具. 环境 Python3.7.0 Django 2.1 Requests 使用范围 POST注入 可以分块传输的漏 ...
- [python]缓存函数结果进redis
工作中遇到一个问题,就是有一些需要对数据库做全表扫描,而且对结果要求比较宽松的地方,总觉得可以找地方优化,比如暂时保存计算结果. 首先想起来的就是functools.lru_cache,但是可惜在py ...
- 磁盘备份工具dcfldd
磁盘备份工具dcfldd dcfldd是Kali Linux自带的一款磁盘备份工具.该工具是dd工具的增强版,更适合渗透测试和安全领域.dcfldd提供实时哈希校验功能,确保数据的安全.同时,它还 ...
- python 乘法表、打印菱形
for i in range(1,10): print ' '.join(map(lambda x:"%d x %d = %d"%(x,i,i*x),range(1,i+1))) ...
- #pragma region、{}
定义一个region,这个region内部的代码你可以把它折叠起来是用于组织代码的,没有其他特别重要的意义. 而{}定义了作用域 { int a = 0; } { int a = 0; }